下面是我尝试在Angular中了解有关服务的更多信息时获得的一些示例代码。这不是我困惑的服务方面,而是构成服务的功能。该函数返回startMonitoring: function(){...}
。我以前从未见过这个,我想知道如何使用它。 startMonitoring
是函数的名称吗?是否包含函数返回时执行的函数?这种类型的退货有名称吗?
batchModule.factory('routeTemplateMonitor', ['$route', 'batchLog', '$rootScope',
function($route, batchLog, $rootScope) {
return {
startMonitoring: function() {
$rootScope.$on('$routeChangeSuccess', function() {
batchLog($route.current ? $route.current.template : null);
});
}
};
}]);
https://docs.angularjs.org/guide/services的示例代码,讨论服务。
答案 0 :(得分:1)
您的工厂创建一个功能名称为startMonitoring
的对象,并在您调用该函数时执行。
所以要使用它:
monitor.startMonitoring();
在使用Object.create方法部分的此页Working with object中,您会看到一个解释。
希望它有所帮助!
编辑:返回类型只是一个普通的javascript对象
答案 1 :(得分:1)
anonymous function expression附加object literal作为CREATE TRIGGER (Transact-SQL)属性的值。
可以写成:
batchModule.factory('routeTemplateMonitor', ['$route', 'batchLog', '$rootScope',
function($route, batchLog, $rootScope) {
function startMonitoring() {
$rootScope.$on('$routeChangeSuccess', function() {
batchLog($route.current ? $route.current.template : null);
});
}
var service = { startMonitoring: startMonitoring };
return service;
};
]);
该函数只应在运行块中调用一次:
app.run(['routeTemplateMonitor', function(routeTemplateMonitor) {
routeTemplateMonitor.startMonitoring();
}]);
从控制器调用它可能会因多个调用而导致内存泄漏,因为控制器是由ng-view
,ng-if
,ng-repeat
等指令创建和销毁的。
或者,可以在实例化工厂时自动启动监视器:
batchModule.factory('routeTemplateMonitor', ['$route', 'batchLog', '$rootScope',
function($route, batchLog, $rootScope) {
function startMonitoring() {
$rootScope.$on('$routeChangeSuccess', function() {
batchLog($route.current ? $route.current.template : null);
});
}
var service = { anotherMethod: method };
startMonitoring();
return service;
};
]);
app.run(['routeTemplateMonitor', function(routeTemplateMonitor) {
console.log("Route Template Monitor Started");
}]);