【问题标题】:AngularJS - reusing controller with different service on same pageAngularJS - 在同一页面上重用具有不同服务的控制器
【发布时间】:2013-05-30 07:09:08
【问题描述】:

在 AngularJS 中,我可以为页面上的一个部分定义一个控制器。我可以有一个带有多控制器的页面。

<div ng-controller="ThisSectionController">
    .... 

</div>
<div ng-controller="ThatSectionController">
    ....
</div>

我可以在使用 ng-init 发送不同配置的同时重用控制器

<div ng-controller="MyController" ng-init="i = 1">  
    {{ i }}
</div>
<div ng-controller="MyController" ng-init="i =2" >
    {{ i }}
</div>

这将按照您的预期输出 1 和 2。

我的问题是 - 如何重用控制器并将其配置为使用不同的服务?

【问题讨论】:

  • + 1 - 不知道 ng-init

标签: angularjs


【解决方案1】:

创建一个注入 $controller 的指令并在链接函数中使用它来在其实例化参数的映射上实例化您想要的控制器:

$controller("MyController", { $scope: scope, myService: myService})

scope 是链接函数的作用域变量,myService 是您可以使用$injector 服务检索的服务。

【讨论】:

  • 让我看看我是否做对了 - 我在指令上传递了一个字符串来指定服务名称,然后我使用了一些 $injector API 之类的 $injector.getService(serviceName)?所以我的指令看起来像这样:&lt;my-dir controller-name="MyController" service-name="MyService"&gt; ... &lt;/my-dir&gt; 这应该替换以前的&lt;div ng-controller="MyController"&gt; 对吧?
  • 其实 - 现在我想起来 - 为什么不在 Controller 中使用 $injector 然后在 ng-init 中传递服务名称?
  • 你是对的,这是一个更好的方法!实际上,我介绍了控制器单元测试方法来模拟服务。
猜你喜欢
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多