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

根据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>

这样我才能遵循最佳做法?您能给我一个具体的例子吗,后者将使我免于前者带来的可怕后果?


湖上湖
浏览 682回答 3
3回答

浮云间

假设您有范围M,A和B,其中M是A和B的父级。如果(A,B)中的一个尝试写入M的范围,则它将仅适用于非原始类型。原因是非基本类型通过引用传递。另一方面,原始类型不是,因此尝试theText在M的作用域上进行写操作将分别在A或B的作用域上创建同名的新属性,而不是写入M。如果A和B都依赖于此属性,则会发生错误,因为它们中的任何一个都不知道另一人正在做什么。

江户川乱折腾

是的,我从理论上有点理解这个问题,但是在实际中我看不出它如何影响这个简单的例子。例如,“如果A和B都依赖于此属性”,什么时候成立?在我的基础上建立一个示例非常好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

AngularJS