【问题标题】:Angular issues updating the view / retrieving promise value after it's fulfilledAngular 在完成后更新视图/检索承诺值的问题
【发布时间】:2015-11-27 07:01:59
【问题描述】:

我的视图上有以下标签:

<label id="error" class="error">{{ login.error }}</label>

使用以下路由/控制器设置 (sn-p)

    $routeProvider.
        when('/login',
        {
            controller  : 'LoginController',
            controllerAs: 'login',
            templateUrl : 'app/views/auth/login.html'
        }).

这里附上一些控制器代码:

function LoginController(user, auth, $location)
{
    var self = this;

    self.error = 'blah'; // works

    function handleRequest(res)
    {
        if (typeof res != 'undefined')
        {
            var token = res.data ? res.data.token : null;

            if (token && auth.isAuthed())
                $location.path('/layout');

            if (res.status == 401)
            {
                return { status:res.status, statusText:res.statusText, error:res.data.error }
            }
        }
    }

    self.login = function(form)
    {
        self.error = 'blah'; // doesn't work

        if(form.validate())
        {
            user.login(self.username, self.password)
                .then(handleRequest, handleRequest)
        }
    }

我无法在方法中更新 login.error 值。 我也试过 $scope 和 $apply 无济于事。

下一期是

user.login(self.username, self.password) .then(handleRequest, handleRequest)

promise,在handleRequest方法中,我返回如下:

return { status:res.status, statusText:res.statusText, error:res.data.error }

我到底如何从履行的承诺中获得价值?

如果我将结果输出到控制台,我会得到以下信息:

我尝试与另一个 .then 等搞混,但无济于事。

编辑:

这似乎适用于检索承诺值:

self.login = function(form)
    {
        self.error = 'blah'; // doesn't work

        if(form.validate())
        {
            var login = user.login(self.username, self.password)
                            .then(handleRequest, handleRequest)

            login.then(function(response)
            {
                console.log(response);
            });
        }
    }

我现在只需要弄清楚如何从方法中显示在视图中。

【问题讨论】:

  • 你试过用$scope.error代替self.error
  • 注入 $scope 并设置 $scope.error 似乎根本不起作用

标签: javascript angularjs promise


【解决方案1】:

我最终发现,如果标签上有名为 error 的类属性,我正在使用的验证包添加了 display:none 样式。

因此该值始终在更新但从未显示:/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2014-03-28
    • 2013-12-27
    • 2020-05-17
    • 1970-01-01
    相关资源
    最近更新 更多