$scope.$watch 只触发一次
$scope.$watch only triggered once
我在控制器中设置了以下监视器:
var embeds = {twitter: false, facebook: false};
$scope.$watch(embeds, function(newVal, oldVal) {
if(embeds.twitter && embeds.facebook) $scope.loading = appLoader.off();
});
这应该在 embeds
更改时触发。我有以下功能来检查我的所有嵌入式推文和 Facebook 帖子是否已为该页面加载。加载所有推文或 Facebook 帖子后,它会在 $timeout
块内更新 embeds
以触发摘要循环。
checkFBInit();
twttr.ready(function(twttr) {
twttr.events.bind('loaded', function(event) {
$timeout(function() {
embeds.twitter = true;
});
});
});
function checkFBInit() {
// Ensure FB.init has been called before attempting to subscribe to event
var fbTrys = 0;
function init() {
fbTrys++;
if (fbTrys >= 60) {
return;
} else if (typeof(FB) !== 'undefined') {
fbTrys = 60;
FB.Event.subscribe('xfbml.render', function() {
$timeout(function() {
embeds.facebook = true;
});
});
return;
} else {
init();
};
};
init();
};
我遇到的问题是我的观察器在我设置时只触发一次。我试过将 embeds
绑定到 $scope
and/or 观看 embeds.twitter
和 embeds.facebook
但观察者只会触发一次。
使用:
$scope.embeds = {twitter: false, facebook: false};
$scope.$watch('embeds', function(newVal, oldVal) {
if ($scope.embeds.twitter && $scope.embeds.facebook) {
$scope.loading = appLoader.off();
}
}, true);
参见 https://docs.angularjs.org/api/ng/type/$rootScope.Scope。第一个参数必须是 string
或 function
其中 return 参数名称。
我在控制器中设置了以下监视器:
var embeds = {twitter: false, facebook: false};
$scope.$watch(embeds, function(newVal, oldVal) {
if(embeds.twitter && embeds.facebook) $scope.loading = appLoader.off();
});
这应该在 embeds
更改时触发。我有以下功能来检查我的所有嵌入式推文和 Facebook 帖子是否已为该页面加载。加载所有推文或 Facebook 帖子后,它会在 $timeout
块内更新 embeds
以触发摘要循环。
checkFBInit();
twttr.ready(function(twttr) {
twttr.events.bind('loaded', function(event) {
$timeout(function() {
embeds.twitter = true;
});
});
});
function checkFBInit() {
// Ensure FB.init has been called before attempting to subscribe to event
var fbTrys = 0;
function init() {
fbTrys++;
if (fbTrys >= 60) {
return;
} else if (typeof(FB) !== 'undefined') {
fbTrys = 60;
FB.Event.subscribe('xfbml.render', function() {
$timeout(function() {
embeds.facebook = true;
});
});
return;
} else {
init();
};
};
init();
};
我遇到的问题是我的观察器在我设置时只触发一次。我试过将 embeds
绑定到 $scope
and/or 观看 embeds.twitter
和 embeds.facebook
但观察者只会触发一次。
使用:
$scope.embeds = {twitter: false, facebook: false};
$scope.$watch('embeds', function(newVal, oldVal) {
if ($scope.embeds.twitter && $scope.embeds.facebook) {
$scope.loading = appLoader.off();
}
}, true);
参见 https://docs.angularjs.org/api/ng/type/$rootScope.Scope。第一个参数必须是 string
或 function
其中 return 参数名称。