我正在尝试使用$parse
来获取所需的结果。
这是我的Example。检查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);
谢谢。
答案 0 :(得分:1)
您的邮件语法不正确,因此$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]);
结果将是相同的。
Example on plunker.(我已经重新格式化了你的例子)
请详细了解使用范围示例。$ eval here和documentation about $parse。