2017-04-20 128 views
0

我有一个角1.4应用程序,我有一个服务,封装与我的后端通信。如果我按照以下方式从端点返回数据。 API服务,我是注射封装我的$ HTTP Ajax请求AngularJS服务返回变量

function MyDataService(Api, $injector, $q, $log) { 
    var self = this; 
    function getAll(){ 
     return self.Api.get('/myData').then(function(data){ 
      self.data = data; 
      return self.data; 
     }) 
    } 
    return self; 
} 

如果我在一个控制器或其它模块使用这个服务的方法,我是不是直接引用该属性?我的意思是,如果我在控制器中执行双重绑定并且发生可变更改,那么我的服务中的self.data也会发生变化?我认为JS默认使用引用。

非常感谢你

+1

是'self'您的服务或您的控制器? – Lodybo

+1

我的服务。我将完成代码:) – acostela

+0

包括$ http ajax调用 –

回答

1

是的。你指的是控制器变量。使用angular copy来避免这种情况。试试这个

function getAll(){ 
 
    return self.Api.get('/myData').then(function(data){ 
 
     self.data = data; 
 
     var retdata={}; 
 
     angular.copy(data, retdata) 
 
     return retdata; 
 
    }) 
 
}

+0

或者我可以直接返回数据,而不是self.data。我错了吗? – acostela

+0

nope ... self.data具有相同的数据引用:) –