1

为什么我不能从 ng-include 内部的 html 设置控制器 ExampleCtrl 的 $scope.myProperty 的值。但是,如果我定义 $scope.myObj.myProperty 并且在 html 中我指的是ng-model="myObj.myProp"工作正常吗?

例子:

<div ng-app="MyApp">
    <div ng-controller='ExampleCtrl'>
        <div ng-include="'#inlcude'"></div>
        <!-- THIS DON'T WORK -->
        <p><b>myProperty:</b>{{myProperty}}</p>
        <!-- THIS WORK -->
        <p><b>myObj.myProperty:</b>{{myObj.myProperty}}</p>
    </div>
</div>    
<!-- INCLUDE HTML -->
<div id='include'>
    <input ng-model='myProperty' type='text' />
    <input ng-model='myObj.myProperty' type='text' />
</div>

我了解 ng-include 创建一个新范围,但是为什么从包含的 html 中我看不到您父范围的简单属性?

谢谢

4

1 回答 1

1

当输入写入myProperty它时(此时)将在子作用域上创建一个属性。此子范围属性隐藏/隐藏同名的父属性。孩子所做的任何更改都将在孩子范围属性上进行。父作用域看不到这个新的子作用域属性——它不知道这个其他属性存在。{{myProperty}}插值时它会找到自己的属性。

当另一个输入写入 时myObj.myProperty,它会遵循原型链并写入父作用域上的属性。

有关更详细的答案(带有大量图片),请参阅AngularJS 中范围原型/原型继承的细微差别是什么?

于 2013-03-06T20:19:57.133 回答