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:)显示它。感谢所有的帮助,我脱离了主题,所以我将深入研究文档并尝试找出答案