坏消息
通过反复试验,我发现WOW 的“异步内容支持”wow
只有在您调用时在 DOM 中呈现了一个元素时才会起作用new WOW().init();
。否则它不会同步任何东西。
证明:
唯一的区别是工作示例中有这个虚拟标签:
<section class="wow"></section>
因此,如果您想WOW
异步工作,请确保在new WOW().init();
调用之前有一个带有“wow”类的虚拟元素。
上一个答案(也很有趣,你可能想看看它)
请看一下我为你制作的这个例子
angular.module('wowTest', [])
.factory('wowAPI', ['$http', function ($http) {
return {
getItems: function () { return $http.get('data.json'); }
}
}])
.controller('wowController', function($scope, wowAPI, $timeout){
$scope.items = [];
wowAPI.getItems().success(function(data){
$scope.items=data.items;
}).then(function(){
$timeout(function(){
new WOW().init();
});
});
});
或原始代码的等效示例:
var app = angular.module('app', []);
app.controller('mainCtrl', function ($scope, $timeout) {
$scope.items = [];
$timeout(function () {
for (var count = 0; count < 50; count++) {
$scope.items.push({
text: "Item " + count
});
}
}).then(function(){
$timeout(function(){
new WOW().init();
});
});
});
问题是它似乎WOW
实际上需要在 DOM 渲染后进行实例化,因此在您的浏览器已经在 DOM 中渲染了您的新值之后,内部的函数$timeout
确保代码将在循环结束时执行.$diggest
$scope
我想你也可以这样做(见下文),但我认为链接承诺要好得多,而不是一个在另一个里面:
.controller('wowController', function($scope, wowAPI, $timeout){
$scope.items = [];
wowAPI.getItems().success(function(data){
$scope.items=data.items;
$timeout(function(){
new WOW().init();
});
});
});