如何在不创建新实例的情况下在多个地方使用同一控制器? AngularJS

时间:2019-05-10 16:17:06

标签: angularjs angularjs-controller

我实质上是在尝试创建可在WordPress页面编辑器中使用的html组件块。我遇到的问题是每个块都在使用ng-controller指令来访问所述控制器的范围。这会导致创建相同控制器的新实例,这会导致显示的块出现延迟(这也不可行)。

我当前设置应用程序的方式是使用链接到html大页面的短代码,这对于最终用户而言不容易管理,并且脱离了我想要实现的基于组件的结构。我已经尝试过使用angularjs .component()指令,但是遇到了与新控制器实例相同的问题。

<div ng-controller="someCtrl"> 
--- first html block that loads first ---
</div>

<div ng-controller="someCtrl"> 
--- second html block that is delayed until after the first is loaded ---
</div>

本质上,我想知道的是是否有一种方法可以访问同一控制器(不包括包装器)而不创建该控制器的新实例?

3 个答案:

答案 0 :(得分:0)

答案是否定的。控制器的每个实例将是一个新实例。您可以利用@TheUnknown的建议在这些实例之间共享数据,因为服务是单例的。

答案 1 :(得分:0)

您可以使用ng-if使用相同的控制器。 所以当

  

<div ng-if="loadFirstHtmlBlock"></div>

是真的。它只会加载特定的<div>

同样适用

  

<div ng-if="loadSecondHtmlBlock">

这只是您可以使用的一种简单方法。

答案 2 :(得分:0)

我发现解决此问题的最佳方法(在angularjs中)的最终结果将是添加不同的组件,以及各自具有从服务中获取信息的控制器。这样一来,页面上的性能会大大提高,加载方式也会更加“同步”。