2015-11-03 45 views
0

我從JSON文件讀取值來加載陣列。我創建了一個示例json文件。如何調用的函數的角速度的js

contact.json: 
    [ 
    { 
    "id":"1", 
    "Name":"abc" 
    } 
    ] 

我創建了一個服務類

ContactsService. 
    app.factory('ContactsService', function ($rootScope, $http, $log) { 
     var contacts = []; 
     return { 
      getContactsList: function() { 
       return contacts; 
      }, 
      loadContactsFromJson: function() { 
       var promise = $http.get('json/contacts.json') 
        .success(function(response) { 
         contacts = response;      
         return contacts; 
        }) 
        .error(function(response) {     
         contacts = []; 
         return contacts; 
        }); 
        return promise; 
      } 
     }; 
    }); 

在我的控制器類:

init(); 
function init() {  
    ContactsService.loadContactsFromJson();  
} 
$scope.contactsList = function() { 
    return ContactsService.getContactsList(); 
}; 

但這裏contactsList是一個函數,但我想在我的控制器類來創建一個數組contactlist並試圖加載在init()函數中的數組。稍後點擊事件,我想添加更多的聯繫人到這個contactlist(contactlist.push)。我如何從ContactsService.getContactsList()方法讀取數值而不是函數?

+0

所以你要使用'$ scope.contactlist'是鏈接數組,而不是「$ scope.contactsList()」,實際上返回呢? – Appeiron

+0

是的。如果我正在使用$ scope.contactList(後來我不能將對象放入它中,我嘗試將一個數組$ scope.contactlist = []分配給init方法$ scope.contactlist = ContactsService.getContactList();但是沒有工作 – hanu

回答

0

創建公共變量(的Service屬性),然後就鏈接Controller它。

//Service 
return { 
    ... 
    contactsList: [] 
    ... 
} 

Controller

//Controller 
$scope.contactsList = ContactsService.contactsList; 
+0

要麼只是'contactsList:contacts'以減少重構。 – Appeiron

0

我認爲你可以讓你設置做的工作對你的承諾。嘗試這樣的事情在控制器:

ContactsService.loadContactsFromJson().then(function (contacts) { 
    $scope.contactsList = contacts; 
} 

如果你想我想你可以包裹在你的初始化函數。希望這可以幫助!

0

在javascript對象通過引用傳遞。然而,當這樣做contacts = response基準的函數副本內被創建和初始參考斷開(調用 - 參考),由此對contacts變量所作的更改不會應用於$scope.contactList

嘗試做SMT。像contacts.push['test']裏面的成功功能,看你自己。