angularjs – Angular $编译与所需的控制器

前端之家收集整理的这篇文章主要介绍了angularjs – Angular $编译与所需的控制器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个复合列表指令 – 这是一个列表项,它可以是一个列表。
父指令定义控制器:
.directive('parent',function() {
    controller: function($scope) {
    },link: function (scope,element,attrs) {
    }
})

列表(项目)要求父控制器本身工作正常(为什么不应该..):

.directive('list',function() {
     require: '^parent',attrs,parentCtrl) {
     }
  })

对于具体项目也是一样,这也是一样的:

.directive('item',function() {
    require: '^parent',parentCtrl) {
    }
})

一个项目可能是一个组合,在这种情况下,它自己创建一个“列表”。这个组合是通过$ compile(ing)链接函数中的列表项来完成的:

link: function (scope,parentCtrl) {
      ...
      $compile("<list></list>")(scope)
      ... 
}

哪一个例外:
无法找到指令’list’所要求的Controller’parent’
原因很明显 – $ compile函数没有提供控制器,因此“parent”的要求无法解决
所以我试过手动提供控制器:

$compile("<list></list>")(scope,null,{'parent': parentCtrl});

哪些不会引发异常,但是在需要时仍然不提供此控制器。

任何想法如何使$ compile函数接受一个外部控制器,应该被评估?

我刚刚有一个类似的问题,解决方案似乎是首先将元素添加到父代,然后编译它。
.directive('item',function($compile) {
  return {
    template:'<li><a ng-click="addSubList()">Create Another List</a></li>',require: '^parent',replace: true,link: function(scope,parentCtrl) {

      scope.addSubList = function() {
        var sublist = angular.element('<ul list>');
        element.find('a').append(sublist);
        $compile(sublist)(scope);
      };

    }
  };
});

看到这个Plunker:http://plnkr.co/edit/dASASrFbtXSMCRZKRAj5?p=preview

猜你在找的Angularjs相关文章