首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在控制器与服务(AngularJS)之间共享数据

在控制器与服务(AngularJS)之间共享数据
EN

Stack Overflow用户
提问于 2015-04-06 12:31:21
回答 2查看 101关注 0票数 1

我想建立一个网站,它支持几种语言。所以我想使用AngularJS控制器来控制视图。我已经编写了一些脚本,但是我得到了以下错误: TypeError:无法读取未定义的属性'getLang‘

以下是我的AngularJS代码:

代码语言:javascript
复制
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 = ['О нас', 'Наши Услуги', 'Связь с нами']
    }
}])

那我到底犯了什么错?我的意思是,我在开头用en初始化语言变量。那么为什么getLang()函数是未定义的呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-06 12:47:07

代码语言:javascript
复制
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 = ['О нас', 'Наши Услуги', 'Связь с нами']
    }
}])
票数 0
EN

Stack Overflow用户

发布于 2015-04-06 12:33:59

代码语言:javascript
复制
['$scope', function($scope, languageService) 

您没有指定languageService

一定是

代码语言:javascript
复制
['$scope', 'languageService', function($scope, languageService) 

这就是为什么您要获得languageService.getLang的原因是没有定义的,因为您没有为languageService指定任何值,因此getLang不会退出。

所以你的代码会变成:

代码语言:javascript
复制
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 = ['О нас', 'Наши Услуги', 'Связь с нами']
    }
}])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29471385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档