我是Angularjs World的新手。我想从angularjs控制器获取一些数据到Angularjs Factory.Controller和factory在不同的js文件中定义。
来自Factory的代码(文件名Application.js)
var app=angular.module('myApp',[])
app.factory('autoCompleteDataService', [function(MyController) {
return {
getSource: function() {
return MyController.getFirstName();
}
}
}]);
app.directive('autoComplete', function(autoCompleteDataService) {
return {
restrict: 'A',
link: function(scope, elem, attr, ctrl) {
$(elem).autocompleteArray(autoCompleteDataService.getSource(), {
minLength: 2
});
}
}})
控制器代码(文件名称Controller.js)
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;
}
MyData是包含“fname”
的一些硬编码值的数组当我运行此代码时出现错误'错误:MyController未定义'。是否可以从控制器获取数据,如果是,那么如何?
答案 0 :(得分:1)
您应该在工厂中定义源或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;
}]);