2014-11-21 110 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