我需要在主頁中渲染幾個傳送帶(和其他數據)。我有一項服務來獲取與頁面相關的所有數據(在單個請求中)。我正嘗試使用ng-repeat在每個輪播中呈現項目。還有一些jQuery腳本,需要在所有綁定之後執行(以呈現輪播和其他JQ組件)。角度和jQuery的執行順序
我的控制器看起來像:
angular.module("app").controller('homeController',['httpService',
function (httpService) {
var vm = this;
vm.init = function() {
httpService.get('home/GetHomeData', {}).then(function(res) {
vm.data = res;
})
}
vm.getFeaturedModels = function(){
return vm.data.FeaturedProducts;
}
}]);
和頁面:
<div class="wrapper" ng-controller="homeController as vm" ng-init="vm.init()">
...
<ul class="list-inline owl-slider" >
<li class="item" ng-repeat="m in vm.data.FeaturedModels">
{{m.Name}}
</li>
</ul>
...
<script>
jQuery(document).ready(function() {
App.init();
});
</script>
當我運行的應用程序,它提供了奇怪的結果。首先,它不顯示傳送帶,並且出現錯誤 - FeaturedProducts of undefined
。我想這是因爲ng-repeat在ajax完成之前得到執行。
經過一番研究,我將ng-repeat調用改爲直接數據對象(vm.data.FeaturedProducts
而不是vm.getFeaturedProducts()
)。雖然聽起來不太好,但它的工作沒有錯誤。但是,旋轉木馬不會按照它應有的方式呈現。一些動態創建的div不合適。我想在ng-repeat完成任務之前腳本已經被執行了。
另外,我試圖執行承諾後的腳本。它沒用。
在這種情況下,有沒有一種方法控制訂單執行?或者我錯過了什麼?