[英]Share data between controllers with a service (AngularJS)
I want to build a site, which supports several languages. 我想建立一个支持多种语言的网站。 So I wanted to use AngularJS Controllers to controll the view.
所以我想使用AngularJS控制器来控制视图。 I have written some script, but I get the following error: TypeError: Cannot read property 'getLang' of undefined
我已经编写了一些脚本,但是出现以下错误:TypeError:无法读取未定义的属性“ getLang”
Here is my AngularJS code: 这是我的AngularJS代码:
var myApp = angular.module('myApp',[]);
myApp.service('languageService' , function() {
var language = 'en';
return {
getLang: function() {
return language;
},
setLang: function(ind) {
if (ind == 0) {
language = 'en';
} else if (ind == 1) {
language = 'ru';
}
}
};
})
myApp.controller('ChangeLangCtrl', ['$scope', function($scope, languageService) {
$scope.changeLang = function(ind) {
languageService.setLang(ind);
}
}])
myApp.controller('NaviCtrl', ['$scope', function($scope, languageService) {
var currentLang = languageService.getLang();
if (currentLang == 'en') {
$scope.menu = ['About Us', 'Service', 'Contacts'];
} else {
$scope.menu = ['О нас', 'Наши Услуги', 'Связь с нами']
}
}])
So what could be my mistake? 那我的错误可能是什么? I mean, I initialize the language variable with en at the beginning.
我的意思是,我在一开始使用en初始化语言变量。 So why is the getLang() function then undefined?
那么为什么getLang()函数然后未定义?
['$scope', function($scope, languageService)
You didm;t specify languageService
您没有指定
languageService
It must be 一定是
['$scope', 'languageService', function($scope, languageService)
That's the reason why you are getting languageService.getLang
is undefined because you've not specified any value for languageService
so getLang
doesn't exit. 这就是为什么未定义
languageService.getLang
的原因,因为您没有为languageService
指定任何值,所以getLang
不会退出。
So your code will become: 因此,您的代码将变为:
myApp.controller('ChangeLangCtrl', [['$scope', 'languageService',
function($scope, languageService) {
$scope.changeLang = function(ind) {
languageService.setLang(ind);
}
}])
myApp.controller('NaviCtrl', ['$scope', 'languageService', function($scope, languageService) {
var currentLang = languageService.getLang();
if (currentLang == 'en') {
$scope.menu = ['About Us', 'Service', 'Contacts'];
} else {
$scope.menu = ['О нас', 'Наши Услуги', 'Связь с нами']
}
}])
You forget to inject languageService as a dependency in your controller,thats why its throwing that error.
Try this,
var myApp = angular.module('myApp',[]);
myApp.service('languageService' , function() {
var language = 'en';
return {
getLang: function() {
return language;
},
setLang: function(ind) {
if (ind == 0) {
language = 'en';
} else if (ind == 1) {
language = 'ru';
}
}
};
})
myApp.controller('ChangeLangCtrl', ['$scope','languageService', function($scope, languageService) {
$scope.changeLang = function(ind) {
languageService.setLang(ind);
}
}])
myApp.controller('NaviCtrl', ['$scope','languageService', function($scope, languageService) {
var currentLang = languageService.getLang();
if (currentLang == 'en') {
$scope.menu = ['About Us', 'Service', 'Contacts'];
} else {
$scope.menu = ['О нас', 'Наши Услуги', 'Связь с нами']
}
}])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.