2014-09-05 110 views
0
$scope.messages.$add({ 
        $scope.phone : { 
        username: $scope.username, 
        email: $scope.email, 
        dob: $scope.dob 
        } 
        }); 

我将一些数据插入到Firebase数据库中,但丢失了属性ID。我看着以下问题:angular js - missing : after property id语法错误:丢失:属性ID后

但在我的情况下,手机需要是关键。那么,我该如何为我的情况制作一个对象呢?

+0

你不能有'$ scope.phone'为重点的名字 – 2014-09-05 12:09:30

+0

@ codename-:是, 您可以。但他们可能不想。 – 2014-09-05 12:11:24

+0

@ T.J.Crowder:我的意思是你不能写他的方式。我把你的答案作为一个字符串,而不是变量 - 有两个不同的东西。 – 2014-09-05 12:40:34

回答

1

您不能在对象字面量中使用值作为属性名称。

您需要先创建对象,并用括号的语法使用值设置属性:

var msg = {}; 
msg[$scope.phone] = { 
    username: $scope.username, 
    email: $scope.email, 
    dob: $scope.dob 
}; 
$scope.messages.$add(msg); 
1

$scope.phone不是有效的属性名称文字。你可以使用"$scope.phone"

$scope.messages.$add({ 
    "$scope.phone" : { 
     username: $scope.username, 
     email: $scope.email, 
     dob: $scope.dob 
    } 
}); 

... 它会创建与实际名称,这可能不是你想要的属性。看看这个字面意思,我不能从名字中弄清楚你真正想要什么,我不能使phone与其他字段名称相关。


回复您的评论:

See this example: usersRef.set({ alanisawesome: { date_of_birth: "June 23, 1912", full_name: "Alan Turing" } Instead of alaniawesome I want to have phone as my key.

你不能这样做,在一个对象初始化,在它的属性初始化的属性名组成部分总是从字面上理解。你必须做,在两个单独的语句:

var obj = {}; 
obj[alanisawesome] = { date_of_birth: "June 23, 1912", full_name: "Alan Turing" }; 
usersRef.set(obj); 

做是因为在JavaScript中,访问属性名称的对象初始化之外时,您可以使用点符号和文字属性名称( obj.foo)或括号内记法和字符串属性名称(obj["foo"])。在后一种情况下,字符串可以是任何表达式的结果,包括变量引用。

+0

看到这个例子: usersRef.set({ alanisawesome:{ DATE_OF_BIRTH: “1912年6月23日,” FULL_NAME: “阿兰·图灵” } 而不是alaniawesome我想有手机作​​为我的钥匙 – rishiag 2014-09-05 12:11:58

+0

@ rishiag:啊,这是不同的,我已经加入了答案。 – 2014-09-05 12:14:30