Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在angularjs中在我的整个应用程序中使用变量_Javascript_Angularjs_Service_Angularjs Service_Multilingual - Fatal编程技术网

Javascript 如何在angularjs中在我的整个应用程序中使用变量

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

所以我现在正在尝试用angularjs创建一个双语网站。我在做一个简单的ng if,如果我的变量等于一个值,它会显示一种语言,如果它等于另一种语言,它会显示翻译。我在导航栏中有一个按钮,可以在不同的语言之间切换,但在更改时,似乎每个控制器内的服务变量都没有更新。这就是服务

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值,因为只有一个控制器触发该函数。欢迎任何帮助,谢谢。如果有更简单或更有效的方法创建双语网站,请告诉我。

通常我们会为每种语言的关键字创建单独的文件。当我们需要根据语言做出决定时,我们只需从所选语言中提取关键字,并在页面上简单地使用它们

台阶

  • 在单独的模块中创建数据服务,该模块将从单独的语言文件中获取数据
  • 将从服务返回的数据绑定到对象中并简单地返回
  • 将服务引用到UI模块中,并简单地使用对象(UI模块的职责只是显示数据)

  • 数据对象返回的责任现在仅由数据服务承担。

    这主要是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视图中的其余模板不会得到更新,因为没有触发重置该值的事件。是否有办法确保所有组件都收到更改通知?