gpt4 book ai didi

AngularJS on enter 表单输入指令不保存模型值

转载 作者:行者123 更新时间:2023-12-04 16:34:34 26 4
gpt4 key购买 nike

我在页面上有以下内容 - 完整代码在此 Plunker

有定制onEnter在聊天表单输入上按下 Enter 时调用函数的指令。下面的代码片段

//**HTML View**
<div ng-controller="mainCtrl">
<ul>
<li ng-repeat="chat in chatMessages">
{{chat.username}}<br/>
{{chat.message}}
</li>
</ul>
</div>
<form id="chatForm" name="chatForm" ng-controller="formCtrl">
<label for="chat-username">User: </label>
<input type="text" id="chat-username" class="chat__username" ng-model="chat.username" required>
<label for="chat-input">Chat: </label>
<input type="text" id="chat-input" class="chat__input" on-enter="sendChat()" ng-model="chat.message" required>
<a href="#" class="chat__submit icon-comments" id="chat-submit" ng-click="sendChat()" ng-disabled="isChatValid()">Chatme</a>
</form>


//**Javascript**
app.controller('formCtrl',function($scope,Chats){
$scope.sendChat = function() {
if($scope.isChatValid()) {
return;
}
console.log(JSON.stringify($scope.chat));
var msg = {};
angular.copy($scope.chat,msg);
Chats.data.push(msg);
};

$scope.isChatValid = function() {
return $scope.chatForm.$invalid;
};
});

问题是输入值( message )没有保存到范围模型( chat )中。如果我删除 onenter指令它的工作原理。我在这里缺少什么?任何帮助都会很棒

最佳答案

好吧想通了。事实证明,当您在指令中定义作用域对象时,您会创建一个新的子作用域。详情请见此处:

Directive with scope breaking ngmodel of an input

为了解决这个问题,我删除了 scope声明并使用来自 attrs 的函数值目的。

指令现在看起来像这样:

app.directive('onEnter',function() {

var linkFn = function(scope,element,attrs) {
element.bind("keypress", function(event) {
if(event.which === 13) {
scope.$apply(function() {
scope.$eval(attrs.onEnter);
});
event.preventDefault();
}
});
};

return {
link:linkFn
};
});

完整代码在 plunker

关于AngularJS on enter 表单输入指令不保存模型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18369986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com