Angular$scope未按预期工作.正在尝试在控制器$scope和$scope.function作用域中分配对象值

Angular $scope not working as expected. Trying to assign object values in a controller $scope and a $scope.function scope

本文关键字:scope 作用域 function 分配 对象 控制器 工作 Angular      更新时间:2023-09-26

对于上下文,我正在尝试用angularjs编写一些自定义表单验证。我从字段附带的一些默认消息开始。如果error为false,则消息显示为灰色(正常信息),如果error为true(消息显示为红色(警告))。我省略的验证检查将更改消息字符串并将error设置为true(如果检查失败)。因此,每次用户运行验证函数时,我都需要它首先将$scope.registerMessage重置为默认的表单消息,然后再次运行检查,这样任何修复的错误都不会持久存在错误消息。代码目前可以工作,但我已经被迫定义了两次默认消息对象,我相信这是不必要的,但尽管我尽了最大努力,我还是无法以任何其他方式使其工作。

    app.controller('loginCtrl', function ($scope) {
        // default form messages
        $scope.registerMessage = {
            username : {
                message : '',
                error   : false
            },
            firstName : {
                message : '',
                error   : false
            },
            lastName : {
                message : '',
                error   : false
            },
            email : {
                message : 'You must use a valid email to register.',
                error   : false
            },
            password : {
                message : 'Your password must be atleast six characters long and contain a number or special character.',
                error   : false
            },
            reEnterPassword : {
                message : '',
                error   : false
            }
        };
        $scope.validate = function (callback) {
            // reset to default messages before validation
            $scope.registerMessage = {
                username : {
                    message : '',
                    error   : false
                },
                firstName : {
                    message : '',
                    error   : false
                },
                lastName : {
                    message : '',
                    error   : false
                },
                email : {
                    message : 'You must use a valid email to register.',
                    error   : false
                },
                password : {
                    message : 'Your password must be atleast six characters long and contain a number or special character.',
                    error   : false
                },
                reEnterPassword : {
                    message : '',
                    error   : false
                }
            };
            // Form validation Regex checks happen here
        };
    });

我尝试将默认值分配给一个非$scope对象变量,然后在validate函数内外将$scope.registerMessage设置为该变量,但该变量不知何故被分配了新值。有什么想法可以在没有复制的情况下写出来吗?

试试这个

 app.controller('loginCtrl', function ($scope) {
    function defaultMessage() {
        // default form messages
         $scope.registerMessage = {
             username : {
                message : '',
                error   : false
              },
              firstName : {
                 message : '',
                 error   : false
              },
              lastName : {
                  message : '',
                  error   : false
               },
               email : {
                   message : 'You must use a valid email to register.',
                   error   : false
               },
               password : {
                    message : 'Your password must be atleast six characters long and contain a number or special character.',
                     error   : false
                },
                reEnterPassword : {
                      message : '',
                      error   : false
                 }
           };
      }

    $scope.validate = function (callback) {
       defaultMessage();
    };
   //Init
   defaultMessage();
});