2014-11-21 120 views
1

我正在嘗試使用RESTful API做一個簡單的待辦事項應用程序。我的RESTful服務返回以下JSON,從angularjs調用RESTful服務的正確方法

[{"title":"completed this","completed":false},{"title":"and this too","completed":false}] 

返回一個應用程序/ JSON不是一個字符串。

我的觀點是如下,

<div class="container" ng-app="todomvc"> 
     <div id="todoapp" ng-controller="TodoCtrl"> 
      <div class="row" ng-repeat="todo in todos">   
      {{todo.title}} 
      </div> 
     </div> 
</div> 

和我有以下控制器和工廠JS代碼,

var todomvc = angular.module('todomvc', []); 

todomvc.factory('todoREST', function ($q,$http) { 
function get(){ 
    return $http.get('http://localhost/test.php'); 
} 
return{get:get}; 
}); 

todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, $filter, todoREST) { 
    var todos = $scope.todos = todoREST.get().then(function(data){ 
    todos = data.data; 
    console.log(todos); // Data available here 
    }); 
}); 

我不能拿到冠軍的頁面時,它是加載。我究竟做錯了什麼?我的方法是創建RESTful呼叫的正確方法嗎?

這裏是什麼,我已經做了鏈接, http://plnkr.co/edit/kaSCe9HoMPEK1hD4QgJl?p=preview

回答

2

你通過服務,而不是從回調返回的數據的承諾分配$ scope.todos。

嘗試

todoREST.get().then(function(data){ 
    $scope.todos = data.data; 
    console.log($scope.todos); // Data available here 
}); 

http://plnkr.co/edit/C3fbK3NicU7XkdHAbzCr?p=preview

+0

謝謝你,它的工作。我已經用類似的方式定義了put(todos),但是它未定義。 http://plnkr.co/edit/zLNfrvkADtthowaJE98e?p=preview – 2014-11-21 17:51:46

+0

你還沒有真正理解我認爲的承諾的概念。我不明白你從服務中得到這個雙重任務。 'var todos = $ scope.todos = todoStorage.get()...'服務返回一個promise,而不是todos。你可以將這個承諾分配給一個變量,但你可能不想。 – BenCr 2014-11-21 18:23:15

+0

看看你的工廠正在返回,看看爲什麼你的put是未定義的。 – BenCr 2014-11-21 18:24:52