2017-02-23 57 views
1

我運行工廠,並在任何控制器中執行「fn_generarPopupConfirm()」函數。 在這個方法中,我現在已經創建了一個模板。這個模板有一個按鈕,它有一個ng-click,它調用同一工廠內的現有函數。在我的例子我有這樣的:訪問Angular.js中相同的.factory中的方法

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

我該怎麼辦呢稱它爲(「oElim.fn_confirmar()」)?無需定義中,我定義了一個$範圍對象的函數,調用所需的功能。該功能存在於同一工廠。

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; 
}) 
+0

我很驚訝的代碼無法正常工作。你收到什麼錯誤信息? – georgeawg

回答

0

我不認爲這是內部的角度可能,因爲模板是將控制器,而不是工廠的範圍內進行插值的字符串。

如果你真的想爲oElim廠範圍內的訪問,而無需將其注入控制器,你可以在oElim對象直接綁定到$ rootScope,給你模板"$rootScope.oElim.fn_confirmar()"或等價只是"oElim.fn_confirmar()"內其方法原型訪問來自您在角度應用中定義的任何模板。

0

當我知道這是不可能的,但你可以做到以下幾點:

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