我有一个指令
configModule.directive('iMemoryDiv',function () {
return {
restrict: 'E',
scope: {},
replace: true,
templateUrl: '/memoryDiv.html',
link: function(scope, el, attrs) {
scope.iObj = scope.$parent[attrs.bIObject];
if(angular.isDefined(scope.iObj)){
getSummary(scope.iObj);
}
function getSummary(iObj){
}
}
};
}
);
我通过传递对象属性
从html调用它 <i-memory-div b-i-object="app"></i-memory-div> //here app is declared in a respective controller
但是,这里的指令是在控制器之前加载的,其中&#39; app&#39;正在分配。所以scope.iObj = scope.$parent[attrs.bIObject]
总是给我未定义
如何在指定app值后加载指令??
答案 0 :(得分:0)
您可以将指令赋予隔离范围,并将bIObject作为范围属性添加:
scope: {
bIObject: '=',
},
然后你可以将你的代码放在控制器中:而不是链接:
答案 1 :(得分:0)
在链接功能中使用 $ observe 服务,例如
if(attrs. bIObject) {
attrs.$observe('bIObject', function(value) {
console.log(value);
})
}
答案 2 :(得分:0)
这样做不容易:
configModule.directive('iMemoryDiv',function () {
return {
restrict: 'E',
scope: {
'bIObject': '=',
'getParentObject': '&'
},
replace: true,
templateUrl: '/memoryDiv.html',
link: function(scope, el, attrs) {
scope.$watch('bIObject', function(newValue) {
if(angular.isDefined(newValue)) {
getSummary(scope.getParentObject({name: newValue}));
}
});
function getSummary(iObj){
}
}
};
}
或者您是否需要更多来自父范围?