1
- 角1.5.8
- 引導3.3.7(CSS)
- 角的UI 2.0.2
使用角度預輸入(ui.bootstrap.typeahead)需要的對象的列表其將在UI組件與HTMLtyphead不填充角UI
問題顯示
從服務返回
promise
組分(1.5式控制器,視圖綁定)控制器功能使用從服務返回的
promise
並執行then
邏輯並返回對象的array
Typeahead不處理數組...執行控制檯日誌,您可以看到數組。
如果我使用服務方法然後該功能可以運行靜態傳遞對象的相同陣列,而不
HTML
<input type="text" ng-model="$ctrl.search.term" ng-disabled="!$ctrl.search.type"
typeahead-wait-ms="600"
placeholder="Search..."
uib-typeahead="res as res.name for res in $ctrl.submit($viewValue)"
typeahead-no-results="noResults" class="form-control" required>
<i ng-show="loadingLocations" class="icon ion-refresh"></i>
<div ng-show="noResults">
<i class="icon ion-close"></i> No Results Found
</div>
<select class="form-control custom-select-md"
ng-model="$ctrl.search.type"
placeholder="Type"
required>
<option value="" disabled selected>Select Type?</option>
<option value="car">car</option>
<option value="van">van</option>
</select>
組分(控制器,視圖)
//submit search for issuers or issuedCard
submit() {
this.isSubmitting = true;
this._SearchService.performSearch(this.search)
.then(
(resp) => {
//e.g. [{id:1, name:'test'}]
console.log('Search Result', resp);
return resp;
},
(err) => {
console.log('Error Search', err);
this.reset(false);
this.errors = err;
return [];
}
);
//Comment out method above to see this static data returning and working as should be :'(
//return [{id:865,issuer: {},name:"British Testing"},
// {id:866,issuer: {},name:"American Testing"}];
}
服務
performSearch(searchData) {
console.log('Search Qry', searchData);
let deferred = this._$q.defer();
if(!this.isValidSearch(searchData)) {
deferred.reject({status:400, error: 'Bad Request', message:'invalid data'});
return deferred.promise;
}
let searchURI = (searchData.type === 'car' ? 'van' : 'issuer');
this._$http({
url: `${this._AppConstants.api}/${this._AppConstants[searchURI]['search']}`,
method: 'GET',
params: {
name: searchData.term
}
}).then(
(resp) => {
console.log('Search Data', resp);
this.result.term = searchData.term;
this.result.type = searchURI;
deferred.resolve(resp.data[this._AppConstants[searchURI]['searchResp']]);
},
(err) => {
console.log('Error performing search', err);
deferred.reject(err.data);
}
);
return deferred.promise;
}
感謝您的回覆:)我不認爲你已經理解了返回的內容?我可以在控制檯中看到完美無瑕,控制器中有一組對象正在接收,並返回到視圖。 [示例截圖](http://imgur.com/a/ltQG4)。 Service返回promise'deferred.promise',這是API結果,是一個對象數組''{id:1,name:'testing'},{id:2,name:'testing 2'}]'' 。控制器通過'then'成功/錯誤處理程序接收到這個承諾和進程(省略了一些進一步處理冗長的目的),並將數組返回到視圖 – RRR
不。它不返回數組。重新閱讀我的答案。傳遞給then()的回調函數返回一個數組。但是submit()方法不會返回任何東西。它不可能返回一個數組,因爲該數組是異步獲得的**,使用promise。所以它可以(也應該)返回一個數組的承諾,但它不會:它什麼都不返回。如果是這樣,你的打字機就可以正常工作,而且你不會問你的問題。僅僅因爲數組打印在函數的代碼中並不意味着該數組是從函數返回的。這是兩個完全不同的東西。 –
也許我不理解:/ ...感謝您的時間,非常感謝!我是一個Java/Groovy的傢伙......哈哈......還在圍繞着JS。我簡單地將回報添加到服務方法的控制器上,並且工作正常......但我的頭腦卻不明白爲什麼。你提到提交不會返回任何內容......爲什麼我沒有從當時的錯誤或成功處理程序中返回的事實計數?無法相信我在這個愚蠢的問題上花了多少時間:/ – RRR