AngularJS - 如何在路由的上下文中仅在控制器中执行一次函数

时间:2016-09-07 16:15:11

标签: angularjs

我正在使用AngularJS的路由功能。此外,我只想在控制器上使用所有模板。

在我的控制器angularJsController中,我有一个init函数,该函数应该仅在控制器第一次执行时以及我明确调用该函数时执行。但是,我并不是每次路由加载另一个模板时都会执行init函数。

如何实现理想的行为?

var app = angular.module("angularJsApplication", ["ngRoute"]);

app.config(function($routeProvider) {
   $routeProvider
       .when("/overview", {
           templateUrl : "overview.html",
           controller : "angularJsController"
       .when("/settings", {
           templateUrl : "settings.html",
           controller : "angularJsController"
       ...
});

app.controller("angularJsController", function ($scope, $location, $http) {
  $scope.init = function() {
    //do stuff
  };
}

1 个答案:

答案 0 :(得分:0)

创建服务以执行应该只执行一次的事情。服务存储为单例,但您可以提供一种或多种方法来重新执行代码。

app.factory("initService", [function() {
    var returnObject = {}
    // set properties of returnObject
    // do something like this if you need "explicitly call the function"
    returnObject.recaculate = function() {
        // perform recaculations
    } 
    return returnObject;
}]);

不要忘记将服务注入您的控制器:

app.controller("angularJsController", ["$scope", "$location", "$http", "initService", function ($scope, $location, $http, initService) {
    // controller contents
    $scope.reInit = function() {
       initService.recaculate();
    }
}]);