使用ng-controller注入所需的依赖项

使用ng-controller注入所需的依赖项,第1张

使用ng-controller注入所需的依赖项

我不认为有开箱即用的方法。

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

矮人



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5651820.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存