加载AngularJS控制器时运行一次

时间:2014-01-28 09:37:13

标签: angularjs

我有一些东西只需要在加载控制器时完成一次。最好的方法是什么?我已经阅读了一些关于“运行块”但我真的不明白它是如何工作的。

一些伪代码:

when /app
resolove some stuff
load a view
controllerA

ControllerA:

Some-magic-piece-of-code-only-run-once{
 }

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:14)

我总是使用ngInit

HTML:

<div ng-controller="AppController" ng-init="init()"/>

JS:

$scope.init = function () {
  // do something
};

控制器功能中指定的代码也只运行一次:

var AppController = function($scope) {
  // do something very early

  $scope.init = function () {
    // do something on loaded
  };

};

答案 1 :(得分:1)

正常做,控制器只是注入$ scope,services的函数。加载控制器时,此功能仅被调用。你可以在里面做任何事情。

app.controller("yourController",function($scope, myService){
   //Write your logic here.


   //Initialize your scope as normal
});

答案 2 :(得分:0)

很抱歉迟到的回复。如果您希望某些功能仅运行一次(在应用程序加载时),并且它取决于控制器中的某些功能,那么您需要将该功能放在服务/工厂中,并且您将在该服务/工厂中注入该功能。运行块(与该服务相关联)将在加载服务后立即执行。如果您未在运行块中注入服务,则将首先独立于您的服务执行运行块。所以这就是你的目的:

angular.module('myangularapp')
.factory('myLogger', ['$http', 'apiUrl',
function ($http, apiUrl) {
    'use strict';
    function PostService() {
        $http({
            url: apiUrl + 'TestEndPoint',
            dataType: 'json',
            method: 'post',
            data: //some object
        }).then(function success(response) {
        }, function errorCallback(errorThrown) {
        });
    }

    return {
        PostService: PostService
    }
}])
.run(function (myLogger, $rootScope) {
myLogger.PostService();
});