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