我正在使用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
};
}
答案 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();
}
}]);