在Angular.js中访问同一.factory中的方法

时间:2017-02-23 04:31:48

标签: javascript angularjs

我经营工厂,并执行功能" fn_generarPopupConfirm()"在任何控制器中。 在这个方法中,我现在已经创建了一个模板。此模板有一个具有ng-click的按钮,该按钮调用同一工厂内的现有函数。在我的例子中,我有这个:

<button  type="submit" class="btn btn-primary" ng-click="fn_confirmar()">

如何调用它(&#34; oElim.fn_confirmar()&#34;)?而无需定义我定义$ scope对象的函数来调用所需的函数。此功能存在于同一工厂中。

controller: function($scope){

    $scope.fn_confirmar=function(){
        oElim.fn_confirmar();
    }
},

我需要直接调用函数&#34; oElim.fn_confirmar()&#34;使用ng-click事件。它有可能吗?

这是我的工厂。

.factory('eliminar', function($state,$rootScope,$uibModal,popup_generico) {
  var oElim= {};

  oElim.fn_generarPopupConfirm = function(objeto,array,titulo,contenido) {

  $rootScope.modalInstances.push($uibModal.open({
    template: '<form id="form_popup" class="form-horizontal"><div class="modal-header">
   <h3 class="modal-title"><button  type="submit" class="btn btn-primary" 
    ng-click="fn_confirmar()">
    OK</button></div></form>',
    controller: function($scope){

        $scope.fn_confirmar=function(){
            oElim.fn_confirmar();
        }
    },
    backdrop: 'static'
  }));

}

 oElim.fn_confirmar = function(){
    var index =  oElim.array.indexOf(oElim.objeto);
    oElim.array.splice(index, 1);
    popup_generico.fn_CerrarModal();
 }
    return oElim;
})

2 个答案:

答案 0 :(得分:0)

我不相信这是可能的角度,因为模板是一个字符串,将在控制器的上下文内插,而不是工厂。

如果你真的希望对oElim工厂具有范围访问权限而不将其注入控制器,则可以将oElim对象直接绑定到$ rootScope,从而为模板中的方法提供原型访问{{ 1}}或等同于您在角度应用中定义的任何模板的"$rootScope.oElim.fn_confirmar()"

答案 1 :(得分:0)

据我所知,这是不可能的,但你可以做到以下几点:

&#13;
&#13;
controller: function($scope){
    $scope.fn_confirmar = oElim.fn_confirmar;
},
&#13;
&#13;
&#13;

或将对象添加到$ rootScope

&#13;
&#13;
.factory('eliminar', function($state,$rootScope,$uibModal,popup_generico) {
  var oElim= {};
 
  $rootScope.oElim = oElim;

  oElim.fn_generarPopupConfirm = function(objeto,array,titulo,contenido) {

  $rootScope.modalInstances.push($uibModal.open({
    template: '<form id="form_popup" class="form-horizontal"><div class="modal-header">
   <h3 class="modal-title"><button  type="submit" class="btn btn-primary" 
    ng-click="oElim.fn_confirmar()">
    OK</button></div></form>',
    controller: Function.prototype, //Just dummy function
    backdrop: 'static'
  }));

}

 oElim.fn_confirmar = function(){
    var index =  oElim.array.indexOf(oElim.objeto);
    oElim.array.splice(index, 1);
    popup_generico.fn_CerrarModal();
 }
    return oElim;
})
&#13;
&#13;
&#13;

或更好,仅使用内置角度事件服务

&#13;
&#13;
.factory('eliminar', function($state,$rootScope,$uibModal,popup_generico) {
  var oElim= {};

  oElim.fn_generarPopupConfirm = function(objeto,array,titulo,contenido) {

  $rootScope.modalInstances.push($uibModal.open({
    template: '<form id="form_popup" class="form-horizontal"><div class="modal-header">
   <h3 class="modal-title"><button  type="submit" class="btn btn-primary" 
    ng-click="$emit('fn_confirmar')">
    OK</button></div></form>',
    controller: Function.prototype, //Just dummy function
    backdrop: 'static'
  }));

}

 oElim.fn_confirmar = function(){
    var index =  oElim.array.indexOf(oElim.objeto);
    oElim.array.splice(index, 1);
    popup_generico.fn_CerrarModal();
 }
 
 $rootScope.$on('fn_confirmar', oElim.fn_confirmar);
    return oElim;
})
&#13;
&#13;
&#13;