我有一个复合列表指令 – 这是一个列表项,它可以是一个列表。
父指令定义控制器:
父指令定义控制器:
.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