Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs,为什么这个服务会自动执行?_Javascript_Angularjs - Fatal编程技术网

Javascript Angularjs,为什么这个服务会自动执行?

Javascript Angularjs,为什么这个服务会自动执行?,javascript,angularjs,Javascript,Angularjs,以下代码仅在用户单击后触发“ei”警报,但事实并非如此。警报显示在开始处。为什么?如何解决呢?我没有遵循这里的逻辑(评论我的新来者身份) 查一下 html 干杯,您正在声明一个工厂,因此这是一个执行的单例: angular.module('myApp').factory('Erase_added_panels', function() { alert('ei') return true; }); 如果您希望稍后触发警报,只需返回一个对象,该对象的方法执行您需要它执行的操作: a

以下代码仅在用户单击后触发“ei”警报,但事实并非如此。警报显示在开始处。为什么?如何解决呢?我没有遵循这里的逻辑(评论我的新来者身份)

查一下

html


干杯,

您正在声明一个工厂,因此这是一个执行的单例:

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();
    }
}]);