【发布时间】:2014-06-29 18:49:19
【问题描述】:
我正在尝试使用服务调用来更新结果数组,然后在 ng-repeat 中使用该数组。在提交表单时,我调用必要的服务并通过 promise 对象上的 .then() 连接我的回调。不幸的是,只有在我开始从文本输入中删除字符时,视图才会更新。然后它会显示正确的结果。
这是我的看法:
<div id="main" ng-controller="SearchController as searchCtrl">
<div class="header" >
<h1>Search and Add Tracks</h1>
</div>
<!--Search Bar-->
<form class="pure-form pure-g" novalidate ng-submit="searchCtrl.search()">
<div class="pure-u-1">
<input class="pure-input-1" type="search" placeholder="Search for tracks" ng-model="searchCtrl.query">
</div>
</form>
<!--Search Results Table-->
<div class="pure-u-1" >
{{searchCtrl.results.length}}
<div ng-repeat="track in searchCtrl.results" ng-include src="'templates/single-track-view.html'" >
</div>
</div>
</div>
还有我的控制器代码:
app.controller('SearchController',function(){
var searchCtrl = this;
searchCtrl.results = [];
searchCtrl.query = '';
this.search = function(query){
console.log(searchCtrl.query);
var processTracks = function(results){
console.log(results);
searchCtrl.results = results[0].tracks;
searchCtrl.results.push(results[1].tracks);
searchCtrl.query = '';
return results;
}
//search takes a DICTIONARY not a pure string
mopidy.library.search({"any": searchCtrl.query}).then(processTracks,console.error.bind(console));
}
});
当使用 AngularJS 检查器时,我绝对可以看到 searchCtrl.results 在范围内更新,结果正确。在我开始删除字符之前,视图不会更新。
编辑:从承诺返回的结果实际上是一个响应数组。我正在从 Mopidy(音乐播放器)调用 api,数组是来自不同音乐提供者的不同响应。
【问题讨论】:
-
在
processTracks中尝试$scope.apply(),你可以将$scope注入你的控制器 -
我认为您需要在承诺中查看$scope.$apply()。
-
@IanBrindley 这实际上不是必需的 - 您可以吸收承诺。写一个答案。
标签: javascript angularjs promise