![](/img/trans.png)
[英]Angularjs - ng-change and $scope.$watch fires only once
[英]$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帖子。 加载所有Tweets或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
embeds.twitter
绑定到$scope
和/或观看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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.