Mam następujący na stronie - pełny kod w tym Plunkerangularjs on wprowadzić dyrektywę w sprawie wejścia nie stanowią wartość oszczędności modelu
Istnieje zwyczaj dyrektywa onEnter
że wywołuje funkcję po naciśnięciu ENTER na wejście formie czatu . Fragment kodu poniżej
//**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;
};
});
Problem jest wartość wejścia (message
) nie jest zapisany w modelu Zakres (chat
). Jeśli usuniemy dyrektywę onenter
, to działa. Czego tu mi brakuje? Każda pomoc będzie wspaniała.
ah nie widziałem, że masz go również – shaunhusain
osobiście nie podoba mi się to rozwiązanie, ponieważ używa $ eval – Iamisti
Na początku miałem tę samą opinię co @lamisti. Jednak zdałem sobie sprawę, że to rozwiązanie ma dużą zaletę - nie tworzy zakresu izolowania, więc nie będzie konfliktów z innymi potencjalnymi dyrektywami z zakresem izolatu, które mogą być zastosowane do tego samego elementu DOM. – Klon