【问题标题】:How to make controller function execute only once in AngularJS?如何使控制器功能在AngularJS中只执行一次?
【发布时间】:2013-07-22 21:46:33
【问题描述】:

我有一个在某些 html 中引用的控制器。并且 html 会在某些事件上发生变化,因此控制器功能代码会执行多次。
问题是我有一个只需要执行一次的代码。
这是控制器:

angular.module("someModule", [dependencies])
.controller("leftBoardController", function ($scope, someService) {
   (function createFilter(dataService) {
    // here I'm loading all the data on which I want to operate after
            // this code should execute only once
    })(TempEmployeeService);
}

但它会在每次 html 更改时执行。
这是控制器的插入方式:

<section ng-controller="TreeMapController"
                 ng-class="{ 'main-container-single': zoomed }"
                 class="minContainer main-container">

问题:
1) 如何让控制器功能只执行一次?
2)或者有没有办法可以编写这种只执行一次的和平代码?

【问题讨论】:

  • html 更改是什么意思??您是指上述部分中的部分页面更改还是整个页面更改
  • 我认为是整个页面。我更改了代码中的 url 并且 html 更改(页面未重新加载)
  • 如果页面被刷新/加载/加载,控制器将被再次调用——这是预期的

标签: javascript angularjs


【解决方案1】:

将您的“运行一次”代码放入service,并返回一个承诺。

将该服务注入您的控制器。

有关服务创建然后返回承诺以及控制器使用该承诺的示例,请参阅Should services expose their asynchronicity?

【讨论】:

  • 我是用数组变量做的,对我来说更容易理解
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 2014-10-25
  • 2016-02-29
  • 2013-03-05
  • 1970-01-01
  • 2016-11-11
  • 2016-04-09
相关资源
最近更新 更多