我遗漏了一大堆背景,但我不认为有很多必要。我有一堆代码导致具有prop
属性的对象。我然后设置正在观看对象的$scope.$watch
,然后,基本上,广播prop
- 属性的名称,以及newValue[prop]
,该属性的值。看起来有点像这样:
$scope.$watch(function(){return object;}, function(newValue, oldValue) {
for (var prop in object) {
if (newValue[prop] !== oldValue[prop]) {
$scope.$broadcast('from-parent', {a: prop, b: newValue[prop]});
}
}
};
广播的消息console.log()
&#39} Object {a: (the property's name), b: (the value of the property)}
正如您所期望的那样。
奇怪的是,当我删除a:
和b:
键时,即
$scope.$broadcast('from-parent', {prop, newValue[prop]});
我收到Uncaught SyntaxError: Unexpected token [
错误。
您是否不允许通过对象中的括号引用属性?这里发生了什么?
答案 0 :(得分:2)
{prop, newValue[prop]}
不会使用prop
变量中的名称创建属性,它最终会成为无效的对象初始值设定项 - 而不是[]
({{1}也会失败),但是因为对象初始化器不能这样工作。
...属性的名称和newValue [prop]
要从变量中为对象提供属性名称,在ES5中必须先创建对象,然后然后添加属性:
{prop, "foo"}
在ES6中,您将能够使用新的动态属性名称表示法:
var obj = {};
obj[prop] = newValue[prop];
$scope.$broadcast('from-parent', obj);