2013-05-03 46 views
0

免责声明我来自淘汰赛,所以我有一个小麻烦交换了我的思路如何做某些事情,他们的这是一个...使用资源来填充范围财产Angularjs

我有一个<input>,用户可以输入一个电影标题,并应显示一个电影列表。电影的收集从我的其余api通过呼叫http://www.example.com/api/movies?title=matrix提供。 api被封装在角度资源模块中。

我认为$scope.movies = Movie.query({ title: $scope.searchValue });随时会自动更新$scope.searchValue改变,但它似乎不工作的方式。

angular.module('robotdog.resources', ['ngResource']) 
    .factory('Movie', function($resource){ 
     return $resource('/api/movies/:id'); 
    }); 

robotdog.controller('HomeController', function($scope, Movie){ 
    $scope.movies = Movie.query({ title: $scope.searchValue }); 

}); 

只是为了完整性这里的目的是我为这个特定的控制器标记......

<input type="text" ng-model="searchValue" placeholder="Search Movie Title"/> 
<pre>{{ movies | json }}</pre> 

什么是填充$scope.movies与搜索结果的正确方法是用户输入后, <input>中的值?

+0

是U正在从服务器 – 2013-05-03 17:27:59

+0

响应,如果我输入的输入值,并按下回车键没有任何反应。没有请求被发送,并且我在控制台中没有收到错误消息。 – bflemi3 2013-05-03 17:34:23

回答

3

当控制器初始化时,您只调用一次Movie.query。你需要添加一个函数来调用Movie.query,并使用每当searchValue变化:

<input type="text" ng-model="searchValue" ng-change="getMovies" placeholder="Search Movie Title"/> 


robotdog.controller('HomeController', function($scope, Movie) { 
    $scope.getMovies = function() { 
     $scope.movies = Movie.query({ title: $scope.searchValue }); 
    } 
}); 

每当用户改变输入这将调用您的REST API(即在按键),因此,如果这引起太多的RPC,你可能需要添加一个“搜索”按钮,只有问题,当它击中了RPC:

<input type="text" ng-model="searchValue"/> 
<button ng-click="getMovies">Go</button> 
+0

FTFY:'' – imdhmd 2013-09-24 06:14:36

0

或者你可以尝试:

<input type="text" ng-model="searchValue" /> 
<p ng-repeat="movie in movies | filter: searchValue">{{ movie }}</p> 

没有JS在控制器所需,除了一个基地IC查询:

$scope.movies = Movie.query(); 

退房小提琴:http://jsfiddle.net/euan/zuhga76c/