我是angularjs的新手。我对指令中的孤立范围感到困惑。我有以下代码,
HTML
<!doctype html>
<html ng-app="myApp">
<body ng-controller="componentsController">
<div class="scope-one" data-param="a">
<div class="scope-two" data-param="c"></div>
</div>
<!---->
</body>
</html>
脚本
angular.module('components', [])
.controller('componentsController', function($scope){
$scope.a = {
"b": 1
};
$scope.c = {
"d": 2
};
});
angular.module('myApp', ['components'])
.directive('scopeOne', function() {
return {
restrict: 'C',
scope: {
a: "=param"
},
link: function(scope, element, attrs) {
console.log('one', scope);
}
};
})
.directive('scopeTwo', function() {
return {
restrict: 'C',
scope: {
c: "=param"
},
link: function(scope, element, attrs) {
console.log('two', scope);
}
};
})
演示 http://jsfiddle.net/jPtb3/23/
问题
我有两个指令scope-one
和scope-two
,我在scope-two
内使用scope-one
。对于scope-one
,隔离范围是正确的,而对于scope-two
,值为undefined
。我没有遇到问题,我做错了什么?当一个指令不在另一个指令中时,两个隔离的范围值都很好。
答案 0 :(得分:3)
场景1 :当scope-two
不在scope-one
内时,两个指令都直接位于控制器的范围内,一切都按预期工作。
场景2 :当scope-two
位于scope-one
内时,前一指令在后者的范围内移动,而不是直接在控制器的范围内。
在这种情况下,您需要使用$parent
来访问控制器范围的模型c
。
这对我有用:
<div class="scope-one" data-param="a">
<div class="scope-two" data-param="$parent.c"></div>
</div>