我想两个绑定一个指令的范围,它似乎只有一种方式绑定?
I'd like to two bind a directive's scope, it appears its only one way bound?
我想做的很简单:两种方式绑定一个指令的范围。这意味着给定一个带有 $scope.name='Foo'
的父控制器 ParentCtrl
和一个带有 scope: {name: '='}
的指令,我希望当我从指令的 link 函数中更改 scope.name='Bar'
或$scope.name='Bar'
来自给定指令的控制器我希望 ParentCtrl 的模板会反映新的 $scope.name
,否则它只是从父范围绑定到指令范围的一种方式。不幸的是,这不是我得到的。我在这里错过了什么吗?这是一个 plunker link 说明了这个问题:
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>
问题是您有多个 ParentCtrl
实例,第一个在主体上,然后在内部 div.
之一上
因此,当您在范围变量上声明 name
时,您将其声明为原始类型,因此内部控制器中的重写值将简单地具有对 $scope.name
值的新引用。只有在 objects
不是原始类型变量的情况下才会遵循原型继承。
在页面上定义 ng-model
时,您应该遵循 dot rule
。
也不需要 运行 摘要指令内部循环 link 函数。这最终会引发错误。请从那里删除它。
我想做的很简单:两种方式绑定一个指令的范围。这意味着给定一个带有 $scope.name='Foo'
的父控制器 ParentCtrl
和一个带有 scope: {name: '='}
的指令,我希望当我从指令的 link 函数中更改 scope.name='Bar'
或$scope.name='Bar'
来自给定指令的控制器我希望 ParentCtrl 的模板会反映新的 $scope.name
,否则它只是从父范围绑定到指令范围的一种方式。不幸的是,这不是我得到的。我在这里错过了什么吗?这是一个 plunker link 说明了这个问题:
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>
问题是您有多个 ParentCtrl
实例,第一个在主体上,然后在内部 div.
因此,当您在范围变量上声明 name
时,您将其声明为原始类型,因此内部控制器中的重写值将简单地具有对 $scope.name
值的新引用。只有在 objects
不是原始类型变量的情况下才会遵循原型继承。
在页面上定义 ng-model
时,您应该遵循 dot rule
。
也不需要 运行 摘要指令内部循环 link 函数。这最终会引发错误。请从那里删除它。