3
在查看有关指令中的隔离范围的AngularJS(及相关)文档和其他stackoverflow问题之后,我仍然有点困惑。为什么我不能在父范围和指令隔离范围之间进行双向绑定,其中父范围属性是对象而不是属性?我应该使用scope.$parent
以外的所需房产吗?这似乎是错误的。在此先感谢您的帮助。如何从父范围继承复杂的属性到我的指令的隔离范围
相关小提琴是here。
HTML:
<div ng-app="myApp">
<div ng-controller="myCtrl">
<div my-directive>{{test.name}}</div>
</div>
</div>
的JavaScript:
var myApp = angular.module('myApp', []);
myApp.controller('myCtrl', function ($scope) {
$scope.test = {name:"name", value:"value"};
});
myApp.directive("myDirective", function() {
return {
replace: true,
restrict: 'A',
scope: {test: '='},
template: '<div class="parent"><div>This is the parent Div.</div><div>Value={{test}}</div></div>',
link: function (scope, element, attrs) {
console.log("scope.test=["+scope.test +"]");
console.log("scope.$parent.test=["+scope.$parent.test.name+"]");
}
};
});
感谢马克!鉴于我试图绑定的属性是一个对象,使用HTML属性(只能是字符串)引用它并不直观。另外,由于我只是简单地将HTML用作我希望我的指令所在的位置的持有者,所以使用它来定义我希望在范围之间同步的属性似乎并不合理。无论如何,我想我现在明白了。我很感谢你的回答。虽然AngularJS文档有一些优点,但在解释开发人员制定代码决策所需的中级概念时,可以看到有待改进的余地。 – KSev 2013-03-21 16:21:20
是的,我同意HTML属性的值是(范围)对象的名称是相当奇怪的。 – 2013-03-21 16:25:19
对于那些可能会发现这个问题很有帮助的人来说,这里是更新的,工作小提琴与马克的建议实施:http://jsfiddle.net/ksevksev/PWdYZ/ – KSev 2013-03-21 16:30:41