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

时间:2014-04-19 03:43:08

标签: javascript angularjs

对于上下文,我正在尝试在angularjs中编写一些自定义表单验证。我从字段附带的一些默认消息开始。如果错误为false,则消息显示为灰色(正常信息),如果错误为真(消息显示为红色(警告)。验证检查我已省略将更改消息字符串并将错误设置为true(如果检查失败)所以每次用户运行validate函数时,我都需要先将$ 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对象变量,然后将$ scope.registerMessage设置为等于validate变量内外的变量,但该变量以某种方式分配了新值。任何想法如何写,没有重复?

1 个答案:

答案 0 :(得分:1)

试试这个

 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();
});