Javascript 使用ng单击更改出厂值

Javascript 使用ng单击更改出厂值,javascript,angularjs,Javascript,Angularjs,我有一个工厂,在其中我将语言属性设置为字符串。现在我想在用户单击我的网站上的图像时更改此属性(这里的想法是在单击标志时更改网站的整个页面)。到目前为止,当我手动更改页面语言时(使用ng show),页面语言会发生变化,但在按下图像时无法更改页面语言 我的工厂: 'use strict'; angular.module('langService', []) .factory('Language', function() { var myFactory = {};

我有一个工厂,在其中我将语言属性设置为字符串。现在我想在用户单击我的网站上的图像时更改此属性(这里的想法是在单击标志时更改网站的整个页面)。到目前为止,当我手动更改页面语言时(使用
ng show
),页面语言会发生变化,但在按下图像时无法更改页面语言

我的工厂:

'use strict';

angular.module('langService', [])
    .factory('Language', function() {
        var myFactory = {};

        myFactory.language = 'slo';

        return myFactory;
    });
我的控制器:

'use strict';

angular.module('ZICApp')
    .controller('navbarController', function ($scope, Language) {
        $scope.language = Language.language;
    });
$scope.languageProvider = Language;
我的html:

  <div id="navbar" ng-controller="navbarController">
    <ul>
      <li><a ng-click="language = 'eng'"><img src="images/EN.gif"></a></li>
    </ul>
  </div>


需要更改的内容位于视图文件中以及模板中。如果您需要有关该项目的更多信息,请让我知道,并尝试尽可能地将其精简。

您的工厂需要类似的方法

        myFactory.setLanguage = function(lang) {
            myFactory.language = lang;
        };
        $scope.changeLanguage = function(lang) {
            Language.setLanguage(lang);
        }
而您的控制器应该实现如下方法

        myFactory.setLanguage = function(lang) {
            myFactory.language = lang;
        };
        $scope.changeLanguage = function(lang) {
            Language.setLanguage(lang);
        }
您的ng click调用
changeLanguage('eng')


结果工厂:

结果控制器:

结果HTML:

在控制器中更改
$scope.language=language.language
$scope.language=language.getLanguage()

如果要直接访问对象及其属性,则应使用“.”点表示法,以便使用对对象及其属性的引用,而不是对基本类型的引用

您应该尝试如下方式更改工厂:

angular.module('langService', [])
    .factory('Language', function() {
        var language = 'slo';

        function setLanguage(lang) {
            //...optional logic
            language = lang;
        }

        function getLanguage() {
            return language;
        }

        return {
            setLanguage: setLanguage,
            getLanguage: getLanguage
        };
});
var myFactory = {};
var myFactory.settings = {
    currentLanguage : 'slo'
};
return myFactory;
在控制器中:

'use strict';

angular.module('ZICApp')
    .controller('navbarController', function ($scope, Language) {
        $scope.language = Language.language;
    });
$scope.languageProvider = Language;
在标记中,通过引用访问对象的属性:

<li><a ng-click="languageProvider.settings.currentLanguage = 'eng'"><img src="images/EN.gif"></a></li>
  • 如果需要直接访问服务对象,请使用此方法,但建议提供getter/setter方法来访问服务数据

    编辑
    我会像我工作时建议的那样选择二传手/接球手

    它对于plunkr来说有点太大了,请看这里的git repo,不需要封装工厂方法,一个参考就足够了。您的工厂还公开了使setter方法无效的语言变量。由于您可以处理getter中的错误(即“未找到语言”),并执行其他一些逻辑(如清除缓存以便在用户更改语言后更新视图),因此setter对我来说非常有用。您没有getter。您将变量公开为public,这样就可以在不使用setter的情况下进行操作,从而使其变得有点无用。此外,在其他地方使用set方法时,您需要重写错误处理。您是对的,变量应该是私有的。我正在手动翻译所有内容,然后使用ng show:)显示它。感谢所有的帮助,我脱离了主题,所以我将深入研究文档并尝试找出答案