2015-07-20 48 views
0

我试图更好地理解$ parse和$ eval,并弄清楚它们是否(或可以)以我认为可能的方式使用。我创建了一个plnkr来显示我的问题并参考他们的行

我有一个布尔表达式作为字符串值的对象,它将从外部源提供给我(script.js行6- 10):

$scope.input123456abcdefg; 

$scope.object123456abcdefg = { 
    disabled: "input123456abcdefg == 'hello'" 
}; 

我已经尝试了一些代码走查,所有这些2种类型的业务/功能已基本归结为(我的理解)(的script.js线12-15):

var template_v1 = $parse('object123456abcdefg.disabled'); 
$scope.expression_v1 = template_v1($scope); 

$scope.expression_v2 = $scope.$eval('object123456abcdefg.disabled'); 

我期待(希望)为$ parse或$ ev人要做的就是创建一个相当于(的script.js第17行):

$scope.expression_v3 = $scope.input123456abcdefg == 'hello'; 

不过,我才会返回相同的字符串,当我开始,你可以在DOM见评估(index.html的行24 & 28)。

可以用这种方式使用$ parse或$ eval,如果是的话,我在哪里放球?或者在Angular中有另一个选项可以正确执行这种类型的操作?

+2

即时通讯99%的把握,你可以简单地使用数组语法和忘记的eval() – dandavis

+0

别。只因为你可以不意味着你应该。 –

回答

1

正如@dandavis所建议的,如果可能,我会尽量避免使用eval()。 Here a small explanation from MDN

为什么要求传入object123456abcdefg.disabled的值?

编辑:如果你真的找不到这样做的另一种方式,这是你如何让你的代码工作:

$scope.expression_v2 = $scope.$eval($scope.object123456abcdefg.disabled); 
+0

我被问到是否会有一个好的(适当)方法来解决这个问题,我很高兴我找不到任何东西,并且用比我更多的知识程序员进行检查。我将推荐如何更改此数据的方法。 无论如何,谢谢你的时间和建议 – yarhouse