我想做的事情非常简单:双向约束指令的范围。这意味着给定一个带有ParentCtrl
的父控制器$scope.name='Foo'
和带有scope: {name: '='}
的指令我希望当我从指令的链接中更改scope.name='Bar'
时来自给定指令控制器的函数或$scope.name='Bar'
我希望ParentCtrl的模板能反映新的$scope.name
,否则它只能从父范围绑定到指令的范围。不幸的是,这不是我得到的。我在这里错过了什么吗?这是一个说明问题的插件链接:
http://plnkr.co/edit/VeGvWV2AGftFHF0LhnBY?p=preview
代码:
angular.module('docsSimpleDirective', [])
.controller('ParentCtrl', ['$scope', function($scope) {
$scope.name = "Bernie Sanders";
$scope.occupation = "Arsonist";
}])
.directive('myCustomer', function() {
return {
template: 'Name: {{name}} Occupation: {{occupation}}',
scope: {
name: '=',
occupation: '='
},
link: function(scope, element, attrs) {
scope.name = "Donald Drumpf";
scope.occupation = "Fascist pig";
scope.$apply();
}
};
});
模板:
<body ng-app="docsSimpleDirective" ng-controller="ParentCtrl">
Name: {{name}}, Occupation: {{occupation}}<br />
<div ng-controller="ParentCtrl">
<div my-customer name="name" occupation="occupation"></div>
</div>
</body>
答案 0 :(得分:3)
问题是你有ParentCtrl
的多个实例,第一个是在身体上,然后是在内部div之一。
因此,当您在范围变量上声明name
时,您将其声明为基本类型,因此在内部控制器内覆盖值将简单地为$scope.name
值提供新的引用。原型继承仅在objects
不在原始类型变量的情况下才会出现。
在页面上定义dot rule
时,您应该关注ng-model
。
也无需在指令链接功能中运行摘要循环。这最终会引发错误。请从那里删除。