Javascript AngularJS、模块对象和表单名称

Javascript AngularJS、模块对象和表单名称,javascript,angularjs,Javascript,Angularjs,我很难理解一些奇怪的问题,我会尽可能地解释: 例如,我得到了以下表格: <form method="post" action="index.htm" name="chat" novalidate> <label ng-show="chat.message.$error.pattern || chat.message.$error.required" for="message">Some error message</label>

我很难理解一些奇怪的问题,我会尽可能地解释:

例如,我得到了以下表格:

<form method="post" action="index.htm" name="chat" novalidate>
        <label ng-show="chat.message.$error.pattern || chat.message.$error.required" for="message">Some error message</label>
        <textarea ng-required="true" type="text" maxlength="200" id="message" name="message" ng-pattern="patterns.chatMessage" ng-model="chat.message"></textarea>
        <input type="submit" value="send" ng-disabled="chat.$invalid">
</form>

一些错误消息
请注意(因为我没有包括所有代码),
ng pattern=“patterns.chatMessage”
patterns是$rootScope属性。

因此,当页面加载时,我希望chat.message.$error.pattern
false,但显然除非我将
ng model=“其他对象,如client.message”
或设置
ng model=“其他对象属性,如chat.comment”
当页面加载时,
chat.message.$error.pattern
将为真,因此基本上如果modelobject.propertyformName.textareaName相同,我就遇到了这个wierd问题

在排序中发生的情况是,
chat.message.$error.pattern
从页面加载的那一刻起就被设置为true,如果有人能解释这里的问题,我将非常感谢,谢谢大家,祝你们度过愉快的一天。

您不能在表单的
name
标记和
ng模型中使用相同的范围变量。
当您在angular中使用表单标记,并且该标记具有名称属性(例如,
chat
)时,angular将在当前作用域上创建ngFormController的实例,并将该实例分配给
name
属性中指定的变量(在本例中为
chat

如果您使用相同的作用域变量
chat
托管
ng模型
,则ngFormController(在
$scope.chat
上定义)将被您的模型覆盖,并产生不稳定的结果

因此,要解决问题,您需要重命名表单:


一些错误消息

谢谢你,Stewie,我现在明白了,你能给我一个链接,让我可以阅读更多关于ngFormController的信息吗。如果有疑问,请查看文档:和。