我有一些东西只需要在加载控制器时完成一次。最好的方法是什么?我已经阅读了一些关于“运行块”但我真的不明白它是如何工作的。
一些伪代码:
when /app
resolove some stuff
load a view
controllerA
ControllerA:
Some-magic-piece-of-code-only-run-once{
}
有人能指出我正确的方向吗?
答案 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();
});