我遇到了一个问题,每次使用广告系列订阅的州都会加载时,角度流星项目会闪烁。通过闪烁,我的意思是数据存在,然后它会消失并在半秒后回来。
我将其添加到州的resolve
属性中(使用ui-router):
campaigns: ($q) => {
var deferred = $q.defer();
Meteor.subscribe('campaigns', {
onReady: deferred.resolve,
onStop: deferred.reject
});
return deferred.promise;
}
闪烁停止了,但我真的不明白这段代码。理解角度的人能否打破这种解决/推迟情况呢?
不确定为什么会有效。感谢。
答案 0 :(得分:1)
$q is angular's implementation of promises。
非常简单地说,一个promise有两个回调函数可以在返回数据时解析;如果呼叫成功,则为resolve功能;如果呼叫失败,则为拒绝。它获得的任何数据都将被传递到这些函数中(基本上是执行deferred.resolve(data)或deferred.reject(error))。 $ q.defer()允许我们稍后分配解析/拒绝。
meteor's subscribe function takes a few arguments。集合的字符串名称,返回要传递给集合的参数数组的函数,以及对象/函数。最后一个参数的对象部分需要一个“onReady”和“onStop”函数,并将执行这些函数并传递它获得的任何数据。我们在这里传递回调。
最后,我们回复了承诺。 resolve.campaigns将是一个promise,我们可以使用.then(successCallback,failureCallback)调用获取值。流星在幕后处理这个问题。