共谋似乎使控制器失效
transclusion seems to drop controller
假设我有以下两个指令:
angular.module('test').directive('apiDirective', function (){
return {
restrict: 'A',
controller: function () {
this.awesomeFunction = function () {
console.log("CHECK ME OUT BEING AWESOME");
}
}
}
});
angular.module('test').directive('consumerDirective', function ($compile) {
return {
restrict: 'E',
require: '?apiDirective',
transclude: true,
link: function (scope, element, attrs, controller, transcludeFn) {
console.log('preLink controller: ', controller);
transcludeFn(scope, function (tElem, tScope) {
if (attrs.apiDirective === undefined) {
element.attr('api-directive', '');
$compile(element)(scope);
}
element.html(tElem);
$compile(tElem)(tScope);
});
scope.consumerFunction = function () {
console.log('trying to consume the awesome', controller);
controller.awesomeFunction();
}
}
}
});
以及以下html:
<consumer-directive ng-click="consumerFunction()"/>
当指令加载transclusion按预期发生时,将控制器设置为我的apiDirective控制器。然而,在consumerFunction中,控制器始终是null
。为什么?我怀疑这与第二次编译有关?
完全删除第二个编译会导致指令无法正常呈现。为什么?
发生了什么,如何在不手动内联指令上的属性级控制器的情况下修复它?
plnkr演示:http://plnkr.co/edit/Lbh7T9FRg3nS6ERW4HtA
如果你想找到一些东西,你需要有一个指令的实例来寻找控制器(require只返回控制器的实例,而不是函数的工厂)。工作示例:http://plnkr.co/edit/XP3dV456M0No6nbx2zOW?p=preview
<body>
<div ng-app="test">
<consumer-directive api-directive ng-click="consumerFunction()">aaa</consumer-directive>
</div>
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 从控制器返回后Ajax启动事件激发
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 如何在单击复选框后调用控制器方法
- 在控制器和数据对象之间同步数据
- 将Javascript数组发送到控制器ASP.NET MVC
- 角度控制器结构
- 如何在Jquery中发布后将值从视图返回到控制器
- 将值从html传递到AngularJS控制器
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 从控制器继承了隔离的作用域以生成可重用的指令
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- Nodejs API控制器,用于在API之间切换
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 将不在模型中的数据返回到mvc控制器
- 未激发路由的控制器属性上的观察者
- 错误405:向Java控制器(Ajax)发送JSON时找不到POST方法
- 共谋似乎使控制器失效