javascript - Angularjs $rootScope 解析有时不在模板中更新

标签 javascript angularjs angular-ui-router

出于某种原因,我的解析函数中的 $rootScope.user 变量在我的 view.html 模板加载之前没有完成数据分配。

大多数时候,我将能够在我的模板中执行 {{ $root.user.uid }} 并且我将能够看到变量数据,但有时它不会'不要出现。

我对为什么会发生这种情况感到有点困惑,因为在模板加载之前不需要先运行解决方案吗?

有人知道为什么会这样吗?

注意:如果我在 deferred.resolve(); 之前添加一个 console.log($rootScope.user.uid) 它总是显示出来,只是不显示模板中的变量。

.factory('Auth', function($http, $state, $q, $rootScope) {
    var factory = {workflowItemCheck: workflowItemCheck };
    return factory;

   function workflowItemCheck(workflow_id) { return $http.post('/auth/workflow', {workflow_id:workflow_id}); }
})


.config(function($stateProvider, $urlRouterProvider, $locationProvider) {
    var workflow_item_auth = ['$q', 'Auth', '$rootScope', '$stateParams', function ($q, Auth, $rootScope, $stateParams) { 

        var deferred = $q.defer();

        Auth.workflowItemCheck($stateParams.workflow_id).then(function(data){ 
            $rootScope.user = { uid: data.data.uid };
            deferred.resolve(); 
        }, function(){ deferred.reject(); });

        return deferred.promise;
    }];


    $stateProvider.state(
        'workflow2.view', { 
            url: '/:workflow_id/view', 
            templateUrl: 'pages/templates/workflow/view.html',
        }, 
        controller: 'workflow.view', 
        resolve: { authenticated: workflow_item_auth } 
    })



})

请注意: Controller 中没有任何内容。这是专门让我的 $rotoScope 到模板。

最佳答案

您的解决方案未返回 promise ,因此在解决时您的 workflow_item_auth 可能未设置。如果您的 resolve 返回一个 promise ,它不会导航到您的 View ,直到它被解决。

$stateProvider.state(
        'v1', {
            url: '/:workflow_id/view',
            templateUrl: 'view.html',
            resolve: {
                authenticated: function(Auth, $rootScope, $stateParams) {
                    return Auth.workflowItemCheck($stateParams.workflow_id).then(function(data) {
                        $rootScope.user = {uid: data.data.uid};
                        return data;
                    });
                }
            }
        }
);

编辑 - 事实上我看到你在那里返回一个 promise 。我仍然认为那里可能存在时间问题。我仍然会像上面解释的那样去做。

关于javascript - Angularjs $rootScope 解析有时不在模板中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38643223/

相关文章:

jquery - 在 Angular 中使用 ui-sref 时出现错误 : Invalid state ref '' ,

javascript - 如何使图像随页面调整大小

javascript - 将 require() 语法翻译成 import syntax node js

javascript - Angular Express 刷新后从错误的 URL 获取文件

javascript - 单击时从自定义指令调用函数? - Angular JS

javascript - 如何使用 ui-router 仅在某些页面上附加导航栏?

JavaScript ES6 装饰器模式

javascript - 所以我想创建一个基于浏览器的地球和其他绕太阳运行的行星的交互式实时动画......我从哪里开始?

angularjs - 从 ionicView.beforeLeave 获取下一个状态

angular - Angular deploy-url 开关的问题