Javascript Angularjs,为什么这个服务会自动执行?
以下代码仅在用户单击后触发“ei”警报,但事实并非如此。警报显示在开始处。为什么?如何解决呢?我没有遵循这里的逻辑(评论我的新来者身份) 查一下 htmlJavascript Angularjs,为什么这个服务会自动执行?,javascript,angularjs,Javascript,Angularjs,以下代码仅在用户单击后触发“ei”警报,但事实并非如此。警报显示在开始处。为什么?如何解决呢?我没有遵循这里的逻辑(评论我的新来者身份) 查一下 html 干杯,您正在声明一个工厂,因此这是一个执行的单例: angular.module('myApp').factory('Erase_added_panels', function() { alert('ei') return true; }); 如果您希望稍后触发警报,只需返回一个对象,该对象的方法执行您需要它执行的操作: a
干杯,您正在声明一个工厂,因此这是一个执行的单例:
angular.module('myApp').factory('Erase_added_panels', function() {
alert('ei')
return true;
});
如果您希望稍后触发警报,只需返回一个对象,该对象的方法执行您需要它执行的操作:
angular.module('myApp').factory('Erase_added_panels', function() {
return {
foo: function () {
alert('ei')
return true;
}
};
});
那就叫它
angular.module('myApp')
.controller('BarController', ['Erase_added_panels', function (Erase_added_panels) {
Erase_added_panels.foo();
}]);
注意:
Angular指定只要您在应用程序中的某个地方需要服务,就会执行该服务。这里,它的意思是简单地将其添加为依赖项,就可以执行该服务。
他说():
Angular中的所有服务都是惰性实例化的。这意味着
仅当需要实例化服务时,才会创建该服务
服务或依赖于它的应用程序组件。换句话说
换句话说,Angular不会实例化服务,除非请求它们
由应用程序直接或间接执行
当应用程序加载(服务是单例的)时,提供给工厂方法的函数执行一次 所以这个代码:
alert('ei')
return true;
在初始化过程中按创建服务的顺序执行。
因此,通过此函数,您应该返回要在控制器中使用的对象:
如果要从服务中发出警报,应返回一个对象:
angular.module('myApp').factory('Erase_added_panels', function() {
return {
alertUser : function(){
alert('hey!');
};
});
然后从控制器中,可以使用刚返回的对象调用其方法:
angular.module('myApp').controller('StartAnalysis',
['$scope', 'Erase_added_panels', function ($scope, Erase_added_panels) {
$scope.status = 'waiting files ...';
$scope.Process = function() {
Erase_added_panels.alertUser();
}
}]);
请同时阅读文档:谢谢,你们说的都一样,所以我选择第一个。有一个问题需要确认:如果我用返回值定义一个变量(我返回该变量),那么直到我调用工厂,变量才被定义,对吗?如果没有返回,则执行代码。我更新了我的答案,因为它在评论中太长了。我已经检查了指南,但在这两个答案之前,我发现它是分散的。再次感谢你的澄清,我开始觉得更舒服了:)总是很乐意帮忙:-)
angular.module('myApp').factory('Erase_added_panels', function() {
return {
alertUser : function(){
alert('hey!');
};
});
angular.module('myApp').controller('StartAnalysis',
['$scope', 'Erase_added_panels', function ($scope, Erase_added_panels) {
$scope.status = 'waiting files ...';
$scope.Process = function() {
Erase_added_panels.alertUser();
}
}]);