Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngulaJS ng绑定不工作-无法设置未定义的属性_Javascript_Angularjs - Fatal编程技术网

Javascript AngulaJS ng绑定不工作-无法设置未定义的属性

Javascript AngulaJS ng绑定不工作-无法设置未定义的属性,javascript,angularjs,Javascript,Angularjs,我对AngularJS是新手。在验证名称时,我试图通过AngularJS ng bind为span设置值。我试过很多方法 但不幸的是,它不起作用 HTML: JavaScript: $scope.validateName=function(obj){ var name = obj.name; var regex = new RegExp("^[a-zA-Z0-9\/\@\&\%\*\$\>\<\\[\\]\,\(\)\_\'\;\ \:\\-\\.]+$"

我对AngularJS是新手。在验证名称时,我试图通过AngularJS ng bind为span设置值。我试过很多方法 但不幸的是,它不起作用

HTML:


JavaScript:

$scope.validateName=function(obj){
    var name = obj.name;
    var regex = new RegExp("^[a-zA-Z0-9\/\@\&\%\*\$\>\<\\[\\]\,\(\)\_\'\;\ \:\\-\\.]+$");
    if(name != undefined && name != null && name.length < 3){
        obj.name.errMsg = "Please enter minimum 3 characters in Name";
        //$scope.name.errMsg = "Please enter minimum 3 characters in Name"
        // TypeError: Cannot set property 'errMsg' of undefined
    }
};
$scope.validateName=函数(obj){
var name=obj.name;

var regex=new RegExp(“^[a-zA-Z0-9\/\@\&\%\*\$\>\obj.name将是字符串而不是对象。您不能设置字符串类型的属性。您可以按如下方式设置obj

obj = [{name:'name', errMsg:'error message here'}]

obj.name将是字符串而不是对象。您不能设置字符串类型的属性。您可以按如下方式设置obj

obj = [{name:'name', errMsg:'error message here'}]

//data.errMsg而不是data.name.errMsg
$scope.validateName=函数(obj){
var name=obj.name;
var regex=new RegExp(“^[a-zA-Z0-9\/\@\&\%\*\$\>\

//data.errMsg而不是data.name.errMsg
$scope.validateName=函数(obj){
var name=obj.name;

var regex=new RegExp(“^[a-zA-Z0-9\/\@\&\%\*\$\>\您可以尝试下面的代码,也请检查给定场景的工作示例

模板:

<body ng-controller="MainCtrl as data">
    <div class="modal fade" id="myModal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <input id="name" ng-model="data.name" type="text" ng-blur="validateName(this.data)" /><br/>
        <span ng-bind="data.errMsg"></span>
    </div>
</body>
$scope.validateName=function(obj){
    var name = obj.name;
    var regex = new RegExp("^[a-zA-Z0-9\/\@\&\%\*\$\>\<\\[\\]\,\(\)\_\'\;\ \:\\-\\.]+$");
    if(name != undefined && name != null && name.length < 3){
        obj.errMsg = "Please enter minimum 3 characters in Name";
    } else obj.errMsg = '';
};


控制器:

<body ng-controller="MainCtrl as data">
    <div class="modal fade" id="myModal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <input id="name" ng-model="data.name" type="text" ng-blur="validateName(this.data)" /><br/>
        <span ng-bind="data.errMsg"></span>
    </div>
</body>
$scope.validateName=function(obj){
    var name = obj.name;
    var regex = new RegExp("^[a-zA-Z0-9\/\@\&\%\*\$\>\<\\[\\]\,\(\)\_\'\;\ \:\\-\\.]+$");
    if(name != undefined && name != null && name.length < 3){
        obj.errMsg = "Please enter minimum 3 characters in Name";
    } else obj.errMsg = '';
};
$scope.validateName=函数(obj){
var name=obj.name;

var regex=new RegExp(“^[a-zA-Z0-9\/\@\&\%\*\$\>\您可以尝试下面的代码,也请检查给定场景的工作示例

模板:

<body ng-controller="MainCtrl as data">
    <div class="modal fade" id="myModal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <input id="name" ng-model="data.name" type="text" ng-blur="validateName(this.data)" /><br/>
        <span ng-bind="data.errMsg"></span>
    </div>
</body>
$scope.validateName=function(obj){
    var name = obj.name;
    var regex = new RegExp("^[a-zA-Z0-9\/\@\&\%\*\$\>\<\\[\\]\,\(\)\_\'\;\ \:\\-\\.]+$");
    if(name != undefined && name != null && name.length < 3){
        obj.errMsg = "Please enter minimum 3 characters in Name";
    } else obj.errMsg = '';
};


控制器:

<body ng-controller="MainCtrl as data">
    <div class="modal fade" id="myModal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <input id="name" ng-model="data.name" type="text" ng-blur="validateName(this.data)" /><br/>
        <span ng-bind="data.errMsg"></span>
    </div>
</body>
$scope.validateName=function(obj){
    var name = obj.name;
    var regex = new RegExp("^[a-zA-Z0-9\/\@\&\%\*\$\>\<\\[\\]\,\(\)\_\'\;\ \:\\-\\.]+$");
    if(name != undefined && name != null && name.length < 3){
        obj.errMsg = "Please enter minimum 3 characters in Name";
    } else obj.errMsg = '';
};
$scope.validateName=函数(obj){
var name=obj.name;

var regex=new RegExp(“^[a-zA-Z0-9\/\@\&\%\*\$\>\您需要在正确的范围变量上定义errMsg

像这样试试

角度模块(“应用程序”,[]) .controller(“modalCtrl”,函数(){ var ctrl=this; ctrl.nameObj={}; ctrl.nameObj.name=“sss”; ctrl.validateName=function(){ var name=ctrl.nameObj.name;
var regex=new RegExp(“^[a-zA-Z0-9\/\@\&\%\*\$\>\您需要在正确的范围变量上定义errMsg

像这样试试

角度模块(“应用程序”,[]) .controller(“modalCtrl”,函数(){ var ctrl=this; ctrl.nameObj={}; ctrl.nameObj.name=“sss”; ctrl.validateName=function(){ var name=ctrl.nameObj.name;
var regex=new RegExp(“^[a-zA-Z0-9\/\@\&\%\*\$\>\您是否尝试过用validateName(数据)替换validateName(this.data)?this.data似乎不正确。您还可以控制台.log(“validateName”,obj)在您的函数中,找出web控制台中传递的数据实际上是什么。obj.name>>无论我输入什么,它都会给出正确的名称。您是否尝试过用validateName(数据)替换validateName(this.data)?this.data似乎不正确。您也可以使用console.log(“validateName”,obj)在您的函数中,您可以在web控制台中找到传递的数据实际上是什么。obj.name>>无论我输入什么,它都会给出正确的名称。它正在工作。请告诉我为什么data.name.errMsg现在正在工作。当您将obj.name绑定到输入时,您的对象就像{name:“abc”}因此,它将绑定到您的输入值,但您将错误消息绑定到该对象,如obj.name.errMsg=“validation msg”,因此您的对象看起来像{name:{errrMsg:“validation msg”}。因此,在验证您的文本框值之后,将像“[object]“因为您现在正在将值绑定到整个json对象。这就是它不起作用的原因。您需要将文本框值绑定到任何字符串类型的值。它起作用了..您能告诉我为什么data.name.errMsg现在起作用吗?当您将obj.name绑定到输入时,您的对象就像{name:“abc”}”因此,它将绑定到您的输入值,但您将错误消息绑定到该对象,如obj.name.errMsg=“validation msg”,因此您的对象看起来像{name:{errrMsg:“validation msg”}。因此,在验证您的文本框值之后,将像“[object]”因为您现在正在将值绑定到整个json对象。这就是它不起作用的原因。您需要将文本框值绑定到任何字符串类型值。为什么我们需要声明ctrl.nameObj={}在控制器里,你能帮我吗explain@deadend我添加它是因为我认为您需要一个包含name属性数据的对象。在您的示例中,您将ng模型设置为data.name,但后来设置了data.name.errorMsg..这令人困惑,因为输入标记的ng模型应该是文本,而不是对象。因此,我认为您需要包含bo将名称和errorMsg连接到一个对象中的名称。然后您的ng模型将与data.nameObj.name和errorMsg data.nameObj.errorMsg相冲突。这更清楚,并且您不会破坏输入标记@Marcus..的ng模型。注意到了&谢谢您的帮助。@deadend Np:)请接受答案,如果它对我们为什么需要声明ctrl.nameObj={}有帮助的话在控制器里,你能帮我吗explain@deadend我添加它是因为我认为您需要一个包含name属性数据的对象。在您的示例中,您将ng模型设置为data.name,但后来设置了data.name.errorMsg..这令人困惑,因为输入标记的ng模型应该是文本,而不是对象。因此,我认为您需要包含bo将名称和errorMsg连接到一个对象中的名称。然后您的ng模型将与data.nameObj.name和errorMsg data.nameObj.errorMsg相冲突。这更清楚,并且您不会破坏输入标记@Marcus.的ng模型。注意&感谢您的帮助。@deadend Np:)如果有任何帮助,请接受答案