$scope.应用是"catch"和"then"



在Angular 1.6.2和UI路由器中,我希望仅在服务器上建立页面的内容,表明用户具有正确的角色/权限可以访问这一页。

没有$scope.apply() catch()没有触发,但是由于某种原因,当我将其放在其中时,情况并非如此。没有$scope.apply() vm.showContent变量似乎不会尽可能更新视图。

我没有弯曲或JS错误,所以我说我会省略任何其他相关代码,因为我认为没有其他问题会引起问题。

查看/html

<div ng-show="data.showContent">
 // my html, not to be shown until vm.showContent is true     
</div>

控制器

// more JS
var vm = this;
vm.showContent = false;
// more JS
vm.hasRole = function (role, toState, event) {
    Auth.hasRole(role).then(function (data) {
        vm.showContent = true;
        // without this nothing is happening with the view
        $scope.apply();
        alert('has role'); // firing successfully
    }).catch(function () {
        alert('does not have role') // firing also if I add $scope.apply();
        if (event != false) {
            event.preventDefault();
            $state.go('no-permission');
        }
    });
}

查看错误响应值:

//}).catch(function () {
//LOG error response
}).catch(function(errorResponse) {
    console.warn(errorResponse);
    alert('does not have role') // firing also if I add $scope.apply();
    if (event != false) {
        event.preventDefault();
        $state.go('no-permission');
    }
});

$scope.apply()可能正在投掷:

错误:$ rootscope:inprog 动作已经进行

当在承诺链中的成功处理程序中丢下错误时,$ q服务会跳到链条中的第一个后续拒绝处理程序。

有关错误的更多信息,请参见AngularJS错误参考-UROTSCOPE/INPROG


angularjs 1.6治疗的错误与常规拒绝相同

使用以前的版本,成功抛出错误,拒绝处理程序将创建控制台错误消息。更改了AngularJS 1.6以治疗与常规拒绝相同的丢弃错误:

$ Q:

由于E13EEA,从诺言的成熟或拒绝处理者中遇到的错误与常规拒绝完全相同。以前,它也将传递给$exceptionHandler()(除了以错误作为原因拒绝承诺外)。

- Angularjs开发人员指南 - 从v1.5到v1.6- $ q

相关内容

  • 没有找到相关文章

最新更新