如何在服务中存储控制器功能并在AngularJS中调用它们

时间:2017-05-31 11:15:21

标签: angularjs service controller

当我的应用程序结束时(例如关闭导航器选项卡时)我需要执行某些控制器的功能,所以我想在服务中管理这些功能的列表并在需要时调用它们。这些功能会根据我打开的控制器而改变。

这是一些代码

控制器1

angular.module('myApp').component('myComponent', {
controller: function ($scope) {
   var mc = this;
   mc.saveData = function(objectToSave){
     ...
   };
  }
});

控制器2

angular.module('myApp').component('anotherComponent', {
controller: function ($scope) {
   var ac = this;
   ac.printData = function(objects, priority){
     ...
   };
  }
});

如果考虑到它们有不同的参数,如何存储这些函数(saveData& printData),所以当我需要它时,我可以调用它们(myComponent.saveData& anotherComponent.printData)。

2 个答案:

答案 0 :(得分:0)

上述代码不是通用//uncomment for multiple file upload echo $form->field($model, 'image[]')->widget(FileInput::classname(), [ 'options'=>['accept'=>'image/*', 'multiple'=>true], ]); ,而是controller具有自己的控制器范围。因此,方法angular1.5+ component只能在相应的组件HTML模板中访问。

因此,要在应用程序的任何地方使用上述方法,它们应该是某些saveData and printData的一部分,并且需要在您需要的任何地方注入。

您可以创建以下服务:

service\factory

并将其注入您需要的任何地方,例如在您的组件中:

angular.module('FTWApp').service('someService', function() {
    this.saveData = function (objectToSave) { 
    // saveData method code
    };
    this.printData = function (objects, priority) { 
    // printData method code
    }; 
});

答案 1 :(得分:0)

我设法做到这一点,创建了一个服务来管理将被解雇的方法。

angular.module('FTWApp').service('myService',function(){
    var ac = this;
    ac.addMethodForOnClose = addMethodForOnClose;
    ac.arrMethods = [];
    function addMethodForOnClose(idModule, method){
        ac.arrMethods[idModule] = {
                id: idModule,
                method: method
        }
    };

    function executeMethodsOnClose(){
        for(object in ac.arrayMethods){
           ac.arrMethods[object].method();
        }
});

然后在控制器中,只需添加该数组所需的方法:

myService.addMethodForOnClose(id, vm.methodToLaunchOnClose);

之后,捕获$window.onunload并运行myService.executeMethodsOnClose()