$ scope变量中的更改未触发Angular $ watch

时间:2015-03-27 22:48:24

标签: javascript angularjs controller watch

所以我有一个例程需要运行在应用程序初始化时检索的用户数据。

我的主页控制器检查存储中是否有令牌(登录用户),然后如果$ scope.currentUser已经存在则运行例程,或者在其上放置监视时间AJAX调用返回该数据。

但$ watch回调在初始化后永远不会被触发。

这是Feed控制器代码

if (sessionStorage.getItem('token'))
{
    if ($scope.currentUser) {getItems()}
    else {$scope.$watch('currentUser', popFeed()) }
}

function delayForUser()
{
    if ($scope.currentUser) {popFeed()}
}

应用程序控制器代码

if (sessionStorage.getItem('token') && sessionStorage != 'null')
{
    UserSvc.getUser()
    .then(function (response) 
    {
        $scope.currentUser = response.data
    })

1 个答案:

答案 0 :(得分:1)

假设您可以从两个控制器中看到currentUser(您提到它们是不同的),您需要在$watch上传递函数,而不是立即执行它(使用(),这是结果该功能):

$scope.$watch('currentUser', function(newValue) {
    popFeed();
});