根据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条经验 获得超4个赞
假设您有范围M,A和B,其中M是A和B的父级。
如果(A,B)中的一个尝试写入M的范围,则它将仅适用于非原始类型。原因是非基本类型通过引用传递。
另一方面,原始类型不是,因此尝试theText
在M的作用域上进行写操作将分别在A或B的作用域上创建同名的新属性,而不是写入M。如果A和B都依赖于此属性,则会发生错误,因为它们中的任何一个都不知道另一人正在做什么。
江户川乱折腾
TA贡献1851条经验 获得超5个赞
是的,我从理论上有点理解这个问题,但是在实际中我看不出它如何影响这个简单的例子。例如,“如果A和B都依赖于此属性”,什么时候成立?在我的基础上建立一个示例非常好。
- 3 回答
- 0 关注
- 681 浏览
添加回答
举报
0/150
提交
取消