Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 通过赋值运算符指定对象的引用_Angularjs_Angularjs Scope - Fatal编程技术网

Angularjs 通过赋值运算符指定对象的引用

Angularjs 通过赋值运算符指定对象的引用,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我对下面的节目有一个问题。在控制器中,saveContact功能:如果我更改了lineContactService.save($scope.newcontact)到$scope.contacts.push($scope.newcontact) 看起来这个程序的工作原理是一样的。我想知道原因是否是,当执行此行时($scope.contacts=ContactService.list();),服务中联系人列表的引用被分配给了$scope.contacts,以便将新联系人推送到$scope.conta

我对下面的节目有一个问题。在控制器中,saveContact功能:如果我更改了line
ContactService.save($scope.newcontact)
$scope.contacts.push($scope.newcontact)

看起来这个程序的工作原理是一样的。我想知道原因是否是,当执行此行时($scope.contacts=ContactService.list();
),服务中联系人列表的引用被分配给了
$scope.contacts
,以便将新联系人推送到
$scope.contacts
与将新联系人推送到服务中的联系人列表相同


名称
电子邮件
电话

名称 电子邮件 电话 行动 {{contact.name} {{contact.email} {{contact.phone} |
var module=angular.module('app',[]);
模块服务('ContactService',函数(){
//要创建唯一的联系人id
var-uid=1;
//联系人数组,用于保存所有联系人的列表
var触点=[{
id:0,
'名称':'病毒',
“电子邮件”:hello@gmail.com',
“电话”:“123-2343-44”
}];
//保存方法如果尚未存在,请创建新联系人
//否则,请更新现有对象
this.save=功能(联系人){
如果(contact.id==null){
//如果这是新联系人,请将其添加到联系人数组中
contact.id=uid++;
触点。推(触点);
}否则{
//对于现有联系人,请使用id查找此联系人
//并更新它。
对于(联系人中的i){
if(contacts[i].id==contact.id){
触点[i]=触点;
}
}
}
}
//只需搜索给定id的联系人列表
//并返回联系人对象(如果找到)
this.get=函数(id){
对于(联系人中的i){
if(联系人[i].id==id){
返回联系人[i];
}
}
}
//遍历联系人列表并删除
//如果发现,请联系
this.delete=函数(id){
对于(联系人中的i){
if(联系人[i].id==id){
触点。接头(i,1);
}
}
}
//只返回联系人列表
this.list=函数(){
返回联系人;
}
});
模块控制器('ContactController',功能($scope,ContactService){
$scope.contacts=ContactService.list();
$scope.saveContact=函数(){
//ContactService.save($scope.newcontact);
$scope.contacts.push($scope.newcontact);----在此处更改
$scope.newcontact={};
}
$scope.delete=函数(id){
ContactService.delete(id);
如果($scope.newcontact.id==id)$scope.newcontact={};
}
$scope.edit=函数(id){
$scope.newcontact=angular.copy(ContactService.get(id));
}
})

链接到

它不完全相同。
$scope指向的数组。contacts
contacts服务
内部使用的数组是相同的数组,但是
contacts服务
保存
中执行工作,而不是直接按到
$scope.contacts

特别是,如果您要添加的联系人是新联系人(没有id的联系人),则会为其添加id。此外,
save
将更新现有联系人

您的更改似乎有效,因为您正在将联系人添加到
ContactsService
内部数组,但您正在绕过
ContactsService
指定的API


您的方法可能会通过不加区分地添加联系人来复制列表中的联系人。

谢谢您的回答。如果我的理解正确,您的意思是当执行$scope.contacts=ContactService.list();时,联系人服务(即联系人)中联系人列表的引用已分配给$scope.contacts。是否正确?@diane Yes,
contacts服务
正在公开内部数据结构(联系人列表)通过
列表
发送给您。然后将相同的数据结构添加到作用域中。换句话说,
contacts服务
中的
contacts
变量和
$scope。contacts
是相同的对象。