ng-show attribut导致html块闪烁(初学者)

时间:2017-01-10 14:04:08

标签: angularjs jhipster ng-show

在我的登录页面上,当我输入错误的凭据(登录/通过)时,错误消息显示为红色。

在login.html中:

tabc.SelectionChanged += (sender2, args) =>
{
    foreach (var item in tabc.Items)
    {
        if (item == ((TabItem)(tabc.SelectedItem)))
            ((TabItem)item).Foreground = Brushes.Red;
        else
        ((TabItem)item).Foreground = Brushes.Black;
    }                   
};

如果我明确地设置<div class="alert alert-danger" ng-show="authenticationError" translate="login.messages.error.authentication"> <strong></strong> </div> ,则该消息在屏幕上是持久的; (幸好)。 当ng-show="true"是动态的(ng-show变量)

时会出现问题

当此变量设置为true时,将显示错误消息,但在屏幕上保留1秒钟后消失。

幕后(控制器+服务):

login.controller.js:

authenticationError

auth.service.js:

$scope.login = function () {

           // event.preventDefault();
            Auth.login({
                username: $scope.username,
                password: $scope.password,
                rememberMe: $scope.rememberMe
            }).then(function () {
                $scope.authenticationError = false;
              //  if()
                if ($rootScope.previousStateName === 'register') {
                    $state.go('home');
                } else {
                    $rootScope.back();
                }
            }).catch(function () {
                $scope.authenticationError = true;
            });
        };

auth.session.service.js:

angular.module('tessicommunicationApp')
    .factory('Auth', function Auth($rootScope, $state, $q, $translate, Principal, AuthServerProvider, Account, Register, Activate, Password, PasswordResetInit, PasswordResetFinish) {
        return {
            login: function (credentials, callback) {
                var cb = callback || angular.noop;
                var deferred = $q.defer();
                console.log("login ...");
                AuthServerProvider.login(credentials).then(function (data) {
                    // retrieve the logged account information
                    Principal.identity(true).then(function(account) {
                        // After the login the language will be changed to
                        // the language selected by the user during his registration
                        $translate.use(account.langKey).then(function(){
                            $translate.refresh();
                        });
                        deferred.resolve(data);
                    });
                    return cb();
                }).catch(function (err) {
                    this.logout();
                    deferred.reject(err);
                    console.log("erreur login !");
                    return cb(err);
                }.bind(this));

                return deferred.promise;
            },

告诉我你是否需要更多代码。

上下文是:

1)我需要调试这张票。

2)我没有编写任何此Web应用程序的代码(特别是前端部分)

3)我几乎没有AngularJS的知识(只是理论上一点点)。

我希望你能帮我解决我的第一张票:)。*

1 个答案:

答案 0 :(得分:0)

Aren你在这里的陈述末尾错过了一个括号和一个额外的括号:

 }).catch(function (err) {
                    this.logout();
                    deferred.reject(err);
                    console.log("erreur login !");
                    return cb(err);
                }.bind(this));// <-- missing parenthesis 

应该是这样的:

 }).catch(function (err) {
                        this.logout();
                        deferred.reject(err);
                        console.log("erreur login !");
                        return cb(err);
                    }).bind(this);

当您怀疑在不知情的情况下发生的变化时,您可以尝试的其他事项是使用$watch监控变量更改:

$scope.countChange = 0;

$scope.$watch('authenticationError', function(newValue, oldValue) {
  $scope.countChange = $scope.countChange + 1;
  console.log('Change count :',$scope.countChange , ' New Value =', newValue );
});