gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:34:48 25 4
gpt4 key购买 nike

出于某种原因,我的解析函数中的 $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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com