繁体   English   中英

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

[英]Access to method in the same .factory in Angular.js

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

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

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

controller: function($scope){

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

我需要使用ng-click事件直接调用函数“oElim.fn_confirmar()”。 这是可能的?

这是我的工厂。

.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;
})

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

如果你真的希望在不将它注入控制器的情况下对oElim工厂进行范围访问,你可以将oElim对象直接绑定到$ rootScope,使你可以在模板"$rootScope.oElim.fn_confirmar()"对其方法进行原型访问。 "$rootScope.oElim.fn_confirmar()"或等效地只是你在角度应用程序中定义的任何模板中的"oElim.fn_confirmar()"

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

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

或者将对象添加到$ rootScope

 .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; }) 

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

 .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; }) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM