AngularJS解析/美元范围.美元eval表达式



我正试图使用$parse来获得我所需的结果。

这是我的例子。检查script.js文件

我想解析一个表达式,但我得到错误。我如何解决这类数据?

我的代码

    scope.data = {name:{_en:"username", _ar:'مفقود '}}
    // set variable in scope like scope.name_en = scope.data._en, scope.name_ar = scope.data._ar
    for(var i in scope.data) for(var j in scope.data[i]) scope[i+j] = scope.data[i][j];
    scope.messages2 = [{code:200, msg_en:"{{name_en}} is missing.", msg_ar:"مفقود {{name_ar}}"}];
    scope.finalMegs = [];
    for( var i in scope.messages2) {
      var obj = {};
      for(var j in scope.messages2[i]){
        if(j == 'code') continue;
        console.log(scope.$eval(scope.messages2[i][j]) );
        obj[j] = $parse(scope.messages2[i][j])
      }
      /*
      required object is {msg_en = "username is missing.", msg_ar:"مفقود مفقود "}
      */
      scope.finalMegs.push(obj);
    }
    console.log(scope.finalMegs);

谢谢。

您的消息语法不正确,因此$parse$eval无法解析消息。你应该这样写:

scope.messages2 = [
   {
      code:200, 
      msg_en:"name_en + ' is missing.'", 
      msg_ar:"'مفقود ' + name_ar"
   }
];

然后,如果你想获得对象与已经格式化的消息,你应该调用$parse函数以这种方式:

obj[j] = $parse(scope.messages2[i][j])(scope);

因为$parse将角表达式转换为函数,你应该用scope调用它来获得预期的结果。

但是根据您的情况,我认为您也可以将这些行替换为:

obj[j] = scope.$eval(scope.messages2[i][j]);

结果将是相同的。

柱塞示例。(我已经重新格式化了你的例子一点)


请再看一下使用范围的例子。

最新更新