如果我有一个破折号的属性,请在我的范围内说a-a
,其价值为'some value'
,并尝试评估
scope.$eval('a-a')
它将返回0
。我认为它认为连字符是一个减法运算符,但无论如何:有没有办法调用$eval
来返回我需要的东西(即'some-value'
)?
这个小提琴显示了例子:http://jsfiddle.net/BusD7/1/
答案 0 :(得分:0)
您在这里尝试做的事情存在一些问题。
在你的小提琴中,你有
$scope['a-a'] = 'some value';
第一个问题是'a-a'不是正确的变量名。 JS变量可以有下划线(_),字母数字(a-z,1-9)和美元符号($) 您正在尝试使用连字符( - )创建变量;这在JS中是不允许的。
查看此文档。 JS variable names
其次,在你的jsFiddle中你有
{{$eval('a-a')}}
Angularjs $ eval函数试图弄清楚你提供的表达式'a-a',是的,$ eval函数试图评估 - 运算符。
见这里的例子:
这就是Angular在您执行此操作时所做的事情
{{ a-a }} which will result in 0 as well.
and {{ 'a-a' }} would just result in a string of a-a
在你的jsFiddle上玩,你会看到它的作用。
要回答您的问题,请执行此操作以使其发挥作用。
$scope['a-a'] = 'some value'; to this $scope['a_a'] = 'some value';
和
{{$eval('a-a')}} to this {{$eval('a_a')}}
现在您知道变量名称不能有连字符(在JS中),您到底想要完成什么,我会协助您到达那里。
<强>更新强>
是的,当然,谢谢你的纠正。您正在使用括号表示法创建对象属性。我主要使用点符号(即使使用括号表示法),点符号只允许使用常规变量名。
以下是两种表示法类型的链接
对象属性名称可以是任何有效的JavaScript字符串,也可以是可以转换为字符串的任何内容,包括空字符串。但是,任何不是有效JavaScript标识符的属性名称(例如,具有空格或连字符的属性名称,或以数字开头的属性名称)只能使用方括号表示法访问。
并链接Bracket Notation Information
要使用Angularjs解决您的问题,请执行以下操作:
将“a-a”属性名称添加到新对象并附加到$ scope。
like this: $scope.myNewObject = {};
$scope.myNewObject['a-a'] = 'some value';
Then call it like this:
{{ myNewObject['a-a'] }}
Will return: some value
这是在jsFiddle
中工作的想法