我不认为有开箱即用的方法。
ng-controller仅使用常规控制器实例化,就没有机会注入任何东西。
但这是一个有趣的“功能”,实际上,可以使用自定义指令相对简单地对其进行构建。
这是一个说明性的示例( 免责声明 :绝对不会在晦涩的场景下进行测试):
.directive("ngInject", function($parse, $interpolate, $controller, $compile) { return { terminal: true, transclude: true, priority: 510, link: function(scope, element, attrs, ctrls, transclude) { if (!attrs.ngController) { element.removeAttr("ng-inject"); $compile(element)(scope); return; } var controllerName = attrs.ngController; var newScope = scope.$new(false); var locals = $parse(attrs.ngInject)(scope); locals.$scope = newScope; var controller = $controller(controllerName, locals); element.data("ngControllerController", controller); element.removeAttr("ng-inject").removeAttr("ng-controller"); $compile(element)(newScope); transclude(newScope, function(clone){ element.append(clone); }); // restore to hide tracks element.attr("ng-controller", controllerName); } };});
用法如您所描述:
<div ng-controller="MainCtrl"> {{name}} <div ng-controller="SecondCtrl" ng-inject="{foo: name, bar: 'bar'}"> </div></div>
而且,当然,控制器可以注入以下变量:
.controller("SecondCtrl", function($scope, foo, bar){});
矮人
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)