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