如何让发起的控制器知道范围值已经改变

时间:2015-05-19 12:00:06

标签: angularjs ionic-framework

是AngularJS的新手。我有一个登录控制器,用于验证用户详细信息,并在成功调用服务时将用户详细信息保存在localStorage中,并将详细信息分配给用于从各种视图中检索用户详细信息的同一服务中的变量。在登录后我将用户重定向到另一个先前已启动的视图(Visted页面)我将不会看到新的更新用户详细信息,直到我刷新页面(视图)意味着视图不知道我的用户变量的值服务已经改变。请问如何让它知道并更改视图范围值。

2 个答案:

答案 0 :(得分:3)

在控制器中创建一个方法来处理刷新,即:

$scope.refresh = function() {
  // Do things that load data here, probably with promises
};

然后使用它在第一次观看时开始加载控制器,即调用控制器中的刷新功能:

$scope.refresh();

然后,您可以灵活地执行分配事件以强制数据刷新的操作,例如(在您的控制器中):

$rootScope.$on("app.refresh.foo", function() {
  $scope.refresh();
});

然后在其他地方广播,如:

$rootScope.$broadcast("app.refresh.foo"); 

如果视图已加载,它将调用刷新函数。

这种方法的一个好处是,您可以更灵活地向刷新功能添加任意数量的内容。您不必设置个人观察者。

答案 1 :(得分:0)

您需要在控制器中定义服务价值的观察者:

    $scope.$watch(function() {
        return myService.getVal();
    }, function(newVal, oldVal) {
       if(newVal !== oldVal) alert("NEW VALUE");


    });