在角度js

时间:2015-06-24 08:45:03

标签: html angularjs angularjs-directive

我有一个指令

 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值后加载指令??

3 个答案:

答案 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){
        }
    }
};
}

或者您是否需要更多来自父范围?