Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $scope.$watch仅触发一次_Javascript_Angularjs_Angularjs Watch - Fatal编程技术网

Javascript $scope.$watch仅触发一次

Javascript $scope.$watch仅触发一次,javascript,angularjs,angularjs-watch,Javascript,Angularjs,Angularjs Watch,我已在控制器中设置了以下监视程序: var embeds = {twitter: false, facebook: false}; $scope.$watch(embeds, function(newVal, oldVal) { if(embeds.twitter && embeds.facebook) $scope.loading = appLoader.off(); }); 当嵌入更改时,应触发此命令。我有以下功能来检查我的所有嵌入推文和Facebook帖子是否已

我已在控制器中设置了以下监视程序:

var embeds = {twitter: false, facebook: false};

$scope.$watch(embeds, function(newVal, oldVal) {
    if(embeds.twitter && embeds.facebook) $scope.loading = appLoader.off();
});
嵌入
更改时,应触发此命令。我有以下功能来检查我的所有嵌入推文和Facebook帖子是否已加载到该页面。加载所有tweet或Facebook帖子后,它会更新
$timeout
块中嵌入
,以触发摘要循环

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();
};
我遇到的问题是,当我设置它时,我的观察者只触发一次。我尝试将
嵌入
绑定到
$scope
和/或观看
嵌入。twitter
嵌入。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);
请参阅$rootScope.Scope。第一个参数必须是返回参数名称的
字符串
函数。

使用:

$scope.embeds = {twitter: false, facebook: false};
$scope.$watch('embeds', function(newVal, oldVal) {
    if ($scope.embeds.twitter && $scope.embeds.facebook) {
        $scope.loading = appLoader.off();
    }
}, true);

请参阅$rootScope.Scope。第一个参数必须是
string
function
,返回param的名称。

对您的答案进行了投票,因为它是我需要的解决方案的一半。在第二次重新阅读文档后,我意识到我还需要通过将
true
作为第三个参数传递给观察者来检查对象是否相等。将要监视的变量作为字符串传递给观察者是问题的另一半。如果您接受编辑,我会将其标记为答案。谢谢您的评论。一年前,我曾与angular合作,但忘记了这个细微差别:)我对你的答案投了赞成票,因为这是我需要的解决方案的一半。在第二次重新阅读文档后,我意识到我还需要通过将
true
作为第三个参数传递给观察者来检查对象是否相等。将要监视的变量作为字符串传递给观察者是问题的另一半。如果您接受编辑,我会将其标记为答案。谢谢您的评论。一年前,我曾与angular合作,但忘记了这个细微差别:)