Javascript 如何在angularjs中从控制器到工厂获取数据
我是Angularjs世界的新手。我想从angularjs控制器获取一些数据到angularjs工厂。控制器和工厂在不同的js文件中定义 工厂代码(文件名Application.js) }])) 控制器代码(文件名Controller.js)Javascript 如何在angularjs中从控制器到工厂获取数据,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我是Angularjs世界的新手。我想从angularjs控制器获取一些数据到angularjs工厂。控制器和工厂在不同的js文件中定义 工厂代码(文件名Application.js) }])) 控制器代码(文件名Controller.js) 函数MyController($scope){ this.getFirstName=函数() { var arrayFName=[]; 对于(var k=0;k
函数MyController($scope){
this.getFirstName=函数()
{
var arrayFName=[];
对于(var k=0;k<$scope.MyData.length;k++)
{
arrayFName.push($scope.MyData[k].fname);
}
返回arrayFName;
}
MyData是一个数组,包含“fname”的某些硬编码值
当我运行此代码时,出现错误“error:MyController未定义”。是否可以从控制器中获取数据?如果是,则如何获取数据?您应该在工厂中定义source,或
firstName
,然后从控制器中进行设置。然后可以从使用工厂的其他控制器访问它
var app=angular.module('myApp',[])
app.factory('autoCompleteDataService', [function () {
var _source;
return {
getSource: function () {
return _source;
},
setSource: function (source) {
_source = source;
}
}
}]);
随后的控制器可能如下所示:
app.controller('someController', ['$scope', 'autoCompleteDataService',
function ($scope, autoCompleteDataService) {
$scope.source = autoCompleteDataService.getSource();
// or even...
// $scope.getFirstName = autoCompleteDataService.getSource;
}]);
您不希望从控制器获取数据,而是希望从服务获取数据到控制器。您还应该在角度模块上定义控制器:
app.controller('myController',['$scope',function($scope){…}])
按照您的设置方式,您试图在服务中调用getSource
,而这反过来又从您的控制器调用getFirstName
。在该控制器中,您应该做的是setSource()
(或者setFirstName
,这会更有意义)。现在,任何后续请求都不会调用控制器(MyController.getFirstName()
)但是对于服务(autoCompleteDataService.getSource()
)…什么不起作用?您是否制作了一个setSource
函数,并从控制器调用它,以便将\u source
设置为您想要在autoCompleteDataService
中获取的对象?
function MyController($scope){
this.getFirstName= function ()
{
var arrayFName=[];
for(var k=0;k< $scope.MyData.length;k++)
{
arrayFName.push($scope.MyData[k].fname);
}
return arrayFName;
}
var app=angular.module('myApp',[])
app.factory('autoCompleteDataService', [function () {
var _source;
return {
getSource: function () {
return _source;
},
setSource: function (source) {
_source = source;
}
}
}]);
app.controller('someController', ['$scope', 'autoCompleteDataService',
function ($scope, autoCompleteDataService) {
$scope.source = autoCompleteDataService.getSource();
// or even...
// $scope.getFirstName = autoCompleteDataService.getSource;
}]);