Javascript 工厂angularjs中的访问控制器作用域函数

Javascript 工厂angularjs中的访问控制器作用域函数,javascript,angularjs,Javascript,Angularjs,我有一个控制器和一个正在使用控制器功能的工厂。之所以这样做,是因为我想在更多控制器中使用一些功能,这取决于实际的$scope 我的解决方案类似于下面的代码。但是,angular会抛出一个错误,说明controllerFunction未定义 编辑:此代码正在工作!我在代码的其他地方打错了 您需要从控制器向工厂方法传递回调方法 angular.module('myApp') .controller('myController', function ($scope, $http, myInterfa

我有一个控制器和一个正在使用控制器功能的工厂。之所以这样做,是因为我想在更多控制器中使用一些功能,这取决于实际的
$scope
我的解决方案类似于下面的代码。但是,angular会抛出一个错误,说明
controllerFunction
未定义

编辑:此代码正在工作!我在代码的其他地方打错了


您需要从控制器向工厂方法传递回调方法

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;

});

您可以执行类似的操作,代码的问题是您正在传递
$scope
,但之后您将定义函数。注意:
$scope是一个对象
,而不是一个单例共享的服务。每个
控制器
都有自己的
$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;

});

您可以将
controllerFunction()
功能移动到特定服务。。你想在哪里从你的工厂调用$scope.controllerFunction?@Ved是的,我尝试调用它。这是一个简化的代码,实际代码要复杂得多。基本上,我必须在
工厂
中实现一个函数,从
控制器1
调用一个函数,然后在
控制器2
@DNagy中调用此工厂函数。请检查我的答案,并让我知道它是否适用于您
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;

});