我想我在这里缺少一些简单(和重要)的东西.我正在使用一个包含模板的模板,该模板包含一个映射到某个值的输入:
<div ng-controller="Ctrl">
<div ng-include src="'template.html'"></div>
</div>
<!-- template -->
<script type="text/ng-template" id="template.html">
<input ng-model="testvalue" />
</script>
Run Code Online (Sandbox Code Playgroud)
控制器:
function Ctrl($scope) {
$scope.testvalue= "initial value";
}?
Run Code Online (Sandbox Code Playgroud)
警告$ scope.testvalue的值始终显示初始值,而不是更新的值(当您键入输入时).帮助我欧比万.你是我们唯一的希望.
dnc*_*253 31
这是绑定到基元而不是对象的常见问题.传递字符串的值而不是对象的引用.如果您使用对象而不是基元,它可以正常工作.你的范围内有类似的东西.
$scope.foo = {testvalue: "initial value"};
Run Code Online (Sandbox Code Playgroud)
也:
在AngularJS中的transcluded指令中使用`ng-model`
我相信还有更多......
在父作用域中引用对象属性的替代方法是使用$ parent访问父作用域中的基元:
<input ng-model="$parent.testvalue" />
Run Code Online (Sandbox Code Playgroud)
ng-include创建子范围.该范围原型继承自Ctrl的父范围.以下是3种变体的工作原理:
要查看子范围的外观,请使用原始小提琴,并将此代码添加到模板中:
<a ng-click="showScope($event)">show scope</a>
Run Code Online (Sandbox Code Playgroud)
并将此代码添加到Ctrl:
$scope.showScope = function(e) {
console.log(angular.element(e.srcElement).scope());
}
Run Code Online (Sandbox Code Playgroud)
在键入文本框之前,请单击"显示范围"链接.在控制台(我正在使用Chrome)中,您可以扩展"子"范围并看到它不包含testvalue属性(我觉得很惊讶,因为我不知道它是如何显示"初始值"的在文本框中).您可以展开$ parent,然后您将看到testvalue属性 - 此时,具有此名称的属性似乎仅在父作用域中.
现在,清除控制台,键入文本框,然后再次单击"显示范围"链接.您将看到"Child"范围现在具有新的testvalue属性.它会隐藏/隐藏父属性.因此,子作用域中的内容会看到子作用域testvalue属性,而父作用域中的内容会看到父作用域testvalue属性.
更新:仅供参考,我最近撰写了一篇关于范围原型继承的广泛答案/文章,更详细地解释了上述概念,并附有大量图片:AngularJS中范围原型/原型继承的细微差别是什么?