AngularJS - 范围差异

时间:2013-12-08 11:18:23

标签: javascript angularjs angularjs-directive angularjs-scope

我创建了一个简单的小提琴,以说明scopes (true, false, {})之间的差异。

但是我无法理解,为什么它没有像我期望的那样工作......

1)为什么更改控制器上的“val”会影响directiveTwoscope: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>

1 个答案:

答案 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
})