2016-10-22 3 views
2

У меня есть контроллер и завод, который использует функции контроллера. Причина, по которой я это делаю, заключается в том, что я хочу использовать некоторые функции в большем количестве контроллеров, в зависимости от фактического $scope Мое решение было бы чем-то вроде кода ниже. Тем не менее, угловое значение вызывает ошибку: controllerFunction не определеноФункция доступа к контроллеру доступа в заводских угловых значениях

EDIT: Этот код работает! Я сделал опечатку где-то еще в коде.

angular.module('myApp') 
.controller('myController', function ($scope, $http, myInterface) { 
    var myFactory = new myInterface($scope); 
    $scope.controllerFunction = function(){ 
     // do something 
    } 
}) 
.factory('myInterface', function(){ 
    var self; 
    function Interface($scope) { 
     this.$scope = $scope; 
     self = this; 
    } 

    Interface.prototype.interfaceFunction = function(){ 
     self.$scope.controllerFunction(); 
    } 
    return Interface; 
}); 
+0

Вы можете перемещать controllerFunction) 'функцию' (к конкретной услуге .. Чем вы можете использовать его везде –

+0

вы пытаетесь вызвать $ scope.controllerFunction от вашего завода? – Ved

+0

@Ved Да, я пытаюсь это назвать. –

ответ

1

Вам необходимо передать метод обратного вызова для вашего фабричного метода от контроллера.

angular.module('myApp') 
.controller('myController', function ($scope, $http, myInterface) { 
    myInterface.myMethod(function(){// callback method passed to factory 
     $scope.controllerFunction();//will get called from factory via callback 
    )} 
    $scope.controllerFunction = function(){ 
     // do something 
    } 
}) 
.factory('myInterface', function(){ 
    var myMethod = function (cb) { 
     //your code 
     cb(); //calling callback method of controller 
    } 

    return myMethod; 

}); 
1

Вы могли бы сделать что-то вроде этого, проблема с вашим кодом является вы пропусканием $scope, но после того, что вы определяете функцию. Примечание: $scope is an object, а не услуга, которая используется в одноэлементном режиме. Каждый controller имеет свой собственный $scope.

var myApp = angular.module("myApp", []); 
myApp.controller('Ctrl', function($scope, NameService) { 

    $scope.callController = function(){console.log("Called controller")}; 
    $scope.NameService = new NameService($scope);  
}); 

myApp.factory('NameService', function() { 

    //constructor 
    function NameService(scope) { 
     this._scope = scope; 
     this._someFunction() 
    } 

    //wherever you'd reference the scope 
    NameService.prototype._someFunction = function() { 
     this._scope.callController(); 
    } 

    return NameService; 

}); 

http://fiddle.jshell.net/5gmnvL6b/

Смежные вопросы