Javascript 如何在angularjs中在我的整个应用程序中使用变量
所以我现在正在尝试用angularjs创建一个双语网站。我在做一个简单的ng if,如果我的变量等于一个值,它会显示一种语言,如果它等于另一种语言,它会显示翻译。我在导航栏中有一个按钮,可以在不同的语言之间切换,但在更改时,似乎每个控制器内的服务变量都没有更新。这就是服务Javascript 如何在angularjs中在我的整个应用程序中使用变量,javascript,angularjs,service,angularjs-service,multilingual,Javascript,Angularjs,Service,Angularjs Service,Multilingual,所以我现在正在尝试用angularjs创建一个双语网站。我在做一个简单的ng if,如果我的变量等于一个值,它会显示一种语言,如果它等于另一种语言,它会显示翻译。我在导航栏中有一个按钮,可以在不同的语言之间切换,但在更改时,似乎每个控制器内的服务变量都没有更新。这就是服务 angular.module('core.lc').factory('LangChoice', function() { var langOptions = ["Chinese", "English"]; va
angular.module('core.lc').factory('LangChoice', function() {
var langOptions = ["Chinese", "English"];
var langPos = 0;
/* what a function */
function switchLang() {
if (langPos == 0) {
langPos = 1;
}
else {
langPos = 0;
}
return langPos;
}
return {
langPos: langPos,
langOptions: langOptions,
switchLang: switchLang
};
});
创建服务时,它是通过值来解决的。我现在遇到的问题是,函数返回的值为每个控制器寻找一种方法来监视langPos值,因为只有一个控制器触发该函数。欢迎任何帮助,谢谢。如果有更简单或更有效的方法创建双语网站,请告诉我。通常我们会为每种语言的关键字创建单独的文件。当我们需要根据语言做出决定时,我们只需从所选语言中提取关键字,并在页面上简单地使用它们 台阶
数据对象返回的责任现在仅由数据服务承担。这主要是sudo代码,但它应该让您了解如何执行此操作。这不是复制粘贴解决方案 您应该为翻译创建一个哈希/字典,并创建一个过滤器,该过滤器将接收字符串并返回翻译后的字符串
Example of your HTML template:
<h1>{{ $ctrl.title | translate }}</h1>
Example of your relevant controller/directive:
this.title = "Hello" // This would be your default language
Example of the angularjs filter you need to create:
const LANGUAGE_SET = "ZH"; // This needs to be set whenever you change your language and should be stored somewhere you globally.
// These are your translations with the default language being the key.
const Translations = {
"Hello": {
"EN": "Hello",
"ZH" "你好",
}
}
app.filter('translate', function translate(original) {
return Translations[original][LANGUAGE_SET];
});
HTML模板示例:
{{$ctrl.title | translate}}
相关控制器/指令的示例:
this.title=“Hello”//这将是您的默认语言
需要创建的angularjs过滤器示例:
const LANGUAGE_SET=“ZH”//这需要在您更改语言时设置,并且应该存储在您全局的某个位置。
//这些是您的翻译,默认语言是关键。
常量翻译={
“你好”:{
“恩”:“你好”,
“ZH”你好",
}
}
app.filter('translate',函数translate(原始){
返回翻译[原文][语言集];
});
您可以在您的LangChoice服务上使用$watch,如
$rootScope.$watch('LangChoice.myObject', function(newVal){
console.log('data changes into: ', newVal)
}, true);
从您的服务返回myObject,即绑定myObject中的所有单个属性并在控制器上查看。
希望它能起作用。
函数开关lang(){langPos=1-langPos;return langPos;}
您考虑过创建一个过滤器吗?然后您可以这样做:ng if=“'English'”isLanguageSet“
另一种简单的翻译方法是创建一个过滤器,该过滤器接收给定字符串并返回翻译后的字符串。示例:{{$ctrl.title | translate}}。翻译过滤器将在内部计算出当前设置的语言。谢谢,我大部分都理解这一点。我想说的是,我的导航栏是它自己的组件,语言按钮就在这里。当我单击它以更改语言时,ng视图中的其余模板不会得到更新,因为没有触发重置该值的事件。是否有办法确保所有组件都收到更改通知?