Angularjs 工厂对象上的$watch出现问题

Angularjs 工厂对象上的$watch出现问题,angularjs,controller,factory,watch,Angularjs,Controller,Factory,Watch,我在我的工厂里设置了一个变量socialRegisterFactory.pages,一旦FaceBook上的信息完全加载,就会进行更新。我试图在我的控制器中$watch这个变量,以便在加载信息时,当该变量从false变为true时,watch函数相应地更新作用域。我已经在控制器中注销了工厂变量,它确实显示正确,但范围没有正确更新。我的$watch功能有问题吗 我的控制器: $scope.pagesLoaded = false; $scope.$watch(socialRegis

我在我的工厂里设置了一个变量
socialRegisterFactory.pages
,一旦FaceBook上的信息完全加载,就会进行更新。我试图在我的控制器中$watch这个变量,以便在加载信息时,当该变量从false变为true时,watch函数相应地更新作用域。我已经在控制器中注销了工厂变量,它确实显示正确,但范围没有正确更新。我的$watch功能有问题吗

我的控制器:

    $scope.pagesLoaded = false;

    $scope.$watch(socialRegisterFactory.pages, function(newVal, oldVal){
        if (socialRegisterFactory.pages === true) {
            alert("true!");
            $scope.pagesLoaded = true;
        }
    }, true);
我的工厂:

    var socialRegisterFactory ={
        pages: false,
        getAvailablePages: function($scope){
            return $http.get(settings.urlBase+'social/facebook/pages')
                .then(function(resp) {
                    socialRegisterFactory.pages = true;
                    angular.copy(resp.data.data, socialRegisterFactory.fbPages);
                    //$scope.fbPages = socialRegisterFactory.fbPages;
                    return  socialRegisterFactory.fbPages;
                });
        },

$scope.$watch的第一个参数可以是字符串或函数

不确定这在你的具体情况下是否有效,但是嘿

e、 g


或者$scope.$watch('socialRegisterFactory.pages',function(newVal,oldVal){@wbeange实际上对此不太确定,除非工厂作为引用存储在$scope中。啊,是的,工厂需要是一个范围变量
$scope.$watch(
  function() { return socialRegisterFactory.pages; },
  function(newVal, oldVal) {
    if (socialRegisterFactory.pages === true) {
        alert("true!");
        $scope.pagesLoaded = true;
    }
  }, 
  true
);