为了账号安全,请及时绑定邮箱和手机立即绑定

我的ng模型是否真的需要一个点来避免子$ scope问题?

我的ng模型是否真的需要一个点来避免子$ scope问题?

湖上湖 2019-10-30 13:04:22
根据https://github.com/angular/angular.js/wiki/Understanding-Scopes的说法,尝试将数据绑定到附加到您的基本体上是一个问题$scope:范围继承通常是简单明了的,并且您通常甚至不需要知道它正在发生...直到您尝试将2路数据绑定(即表单元素,ng-model)绑定到基元(例如,数字,字符串,布尔值)从子作用域内部在父作用域上定义。它不能像大多数人期望的那样工作。建议是通过遵循始终具有“'”的“最佳实践”,可以很容易地避免使用基元出现此问题。在您的ng模型中现在,我有一个非常简单的设置,它违反了以下规则:HTML:<input type="text" ng-model="theText" /><button ng-disabled="shouldDisable()">Button</button>JS:function MyController($scope) {    $scope.theText = "";    $scope.shouldDisable = function () {         return $scope.theText.length >= 2;    };}这真的不好吗?当我开始尝试以某种方式使用子范围时,这是否会以某种可怕的方式将我搞砸?我需要将其更改为类似function MyController($scope) {    $scope.theText = { value: "" };    $scope.shouldDisable = function () {         return $scope.theText.value.length >= 2;    };}和<input type="text" ng-model="theText.value" /><button ng-disabled="shouldDisable()">Button</button>这样我才能遵循最佳做法?您能给我一个具体的例子吗,后者将使我免于前者带来的可怕后果?
查看完整描述

3 回答

?
浮云间

TA贡献1829条经验 获得超3个赞

假设您有范围M,A和B,其中M是A和B的父级。

如果(A,B)中的一个尝试写入M的范围,则它将仅适用于非原始类型。原因是非基本类型通过引用传递

另一方面,原始类型不是,因此尝试theText在M的作用域上进行写操作将分别在A或B的作用域上创建同名的新属性,而不是写入M。如果A和B都依赖于此属性,则会发生错误,因为它们中的任何一个都不知道另一人正在做什么。


查看完整回答
反对 回复 2019-10-30
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

是的,我从理论上有点理解这个问题,但是在实际中我看不出它如何影响这个简单的例子。例如,“如果A和B都依赖于此属性”,什么时候成立?在我的基础上建立一个示例非常好。

查看完整回答
反对 回复 2019-10-30
  • 3 回答
  • 0 关注
  • 654 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信