我创建了一个简单的小提琴,以说明scopes (true, false, {})
之间的差异。
但是我无法理解,为什么它没有像我期望的那样工作......
1)为什么更改控制器上的“val
”会影响directiveTwo
“scope:true
”。如果我更改了指令中的值,那么控制器就会停止影响它。
2)为什么directiveThree
具有隔离范围,但它继承了控制器中的值(因此在directiveOne
中创建的值传递给它),更改控制器中的值会影响{{1} }。当我从该指令更改值时,它会影响控制器值。隔离范围不应该隔离吗?
Fiddle
HTML:
directiveThree
JavaScript的:
<div id="myApp" ng-controller="ctrl1">
Controller: <input ng-model="val"/> <b>{{val}}</b> Child: <b>{{childVal}}</b>
<br/>
<div directive-one>
Directive 1: <input ng-model="val"/> Val: <b>{{val}}</b> Child: <b>{{childVal}}</b>
</div>
<div directive-two>
Directive 2: <input ng-model="val"/> Val: <b>{{val}}</b> Child: <b>{{childVal}}</b>
</div>
<div directive-three>
Directive 3: <input ng-model="val"/> Val: <b>{{val}}</b> Child: <b>{{childVal}}</b>
</div>
</div>
答案 0 :(得分:0)
DirectiveTwo可能会从控制器中获取更改的原因,但是当DirectiveTwo更改值(...)时控制器不会更改是因为预期让孩子更改父级的值时,将获得裸值不行。
什么是裸值?
angular.module("myApp", [])
.controller("ctrl1", function($scope){
$scope.val ={
value = "CTRL" <--- This way a child will inherit the OBJECT and NOT a COPY
};
$scope.val = "CTRL"; <--- This way the child inherits a COPY of the BARE-VALUE
})