1
我正在使用AngularJS編寫一個Web應用程序。我使用第三方庫(提供Angular服務)從數據庫獲取值,然後使用這些庫初始化頁面上的某些下拉/選擇框。在AngularJS的頁面加載中初始化/填充選擇框
所以,我有簡單的選擇框是這樣的:
<div ng-controller="ChoiceCtrl">
<select ng-model="selectedFoo" ng-options="foo in foos"></select>
<select ng-model="selectedBar" ng-options="bar in bars"></select>
</div>
並初始化爲選擇框的選擇相應的控制器。我使用的服務在從數據庫接收到值之後調用給定的回調函數。 (回調函數可以重構爲一個,但我使用清晰分開的。)
angular.module('choice').controller('ChoiceCtrl', function($scope, ThirdPartyService) {
$scope.selectedFoo = '';
$scope.selectedBar = '';
$scope.foos = '';
$scope.bars = '';
var fooCallback = function(result) {
$scope.foos = result;
$scope.$apply;
}
var barCallback = function(result) {
$scope.bars = result;
$scope.$apply;
}
ThirdPartyService.asyncGetData('fetchFooOptions', fooCallback);
ThirdPartyService.asyncGetData('fetchBarOptions', barCallback);
});
數據庫調用是異步的,並在頁面完成後,已呈現的第一次,所以我手動調用$scope.$apply
在每個回調函數中。
當加載頁面時異步提取值時,這是在AngularJS應用中初始化下拉/選擇框的正確方法嗎?
我讀過的教程說手動調用$scope.$apply
始終是一個「代碼味道」 ......但因爲我從數據庫中獲取的值,操作發生的「角之外」,我認爲它可以使那些呼籲是合理的 - 實際上是必要的。
我也想知道控制器是否適合這些調用。在我讀過的教程中,選項總是在控制器中設置,但這些沙箱實例從未發生異步數據庫調用。
謝謝你,我會看看更多的承諾。 (一旦我有了這樣的聲望,我就會高興地回答你的答案......) – MJV 2013-04-09 10:16:27