使用AngularJS将动态元素创建绑定到按键

时间:2014-02-06 13:15:46

标签: angularjs angular-ui angularjs-model

我正在尝试使用AngularJS从用户文本输入向DOM添加元素。 期望的行为是:

  • 用户将字符串输入到输入ng-model“newTask”
  • 按回车键
  • 然后将动态元素附加到DOM

HTML的相关部分如下:

<div class="add-task">
  <input type="text" placeholder="Type then press enter to create task" ng-model="newTask" />
</div>

<div class="task-list">
  <a class="task"><span class="text">{{ newTask }}</span></a>
</div>
  • 目前HTML已即时更新。如何才能将此事件绑定到仅在进入按键后才会发生? AngularJS UI也已加载。

很多赞赏, 一个AngularJS新手

3 个答案:

答案 0 :(得分:1)

尝试创建临时值

HTML:

<input type="text" placeholder="Type then press enter to create task" ng-model="tmpTask" ng-keypress="saveTask($event)" />

您的ng-model绑定到tmpTask媒体资源。仅在按下Enter时,将其保存回newTask

JS:

app.controller('MainCtrl', function($scope) {
  $scope.saveTask = function (event){
    if (event.keyCode == 13){
      $scope.newTask = $scope.tmpTask;
    }
  }
});

DEMO

答案 1 :(得分:1)

HTML

<form ng-submit="createTask()">
    <input type="text" ng-model="newTaskText" />
</form>

<div ng-repeat="task in tasks">{{ task.text }}</div>

控制器

$scope.tasks = [];

$scope.createTask = function() {
    $scope.tasks.push({
        text: $scope.newTaskText
    });
};

答案 2 :(得分:1)

由于其他一个答案解决了ng-keypress,我会提出你不需要使用ng-keypress事件的事实,但只能观察变量而不需要输入:

http://plnkr.co/edit/osFGRtpHG46bMyp15mc8?p=preview

app.controller('MainCtrl', function($scope) {
  $scope.taskList = [];

 $scope.$watch('newTask', function(newVal){
     if (newVal=="newTask") {
       $scope.taskList.push("Task " + $scope.taskList.length);
       $scope.newTask = null;
     }
 });
});



 <body ng-controller="MainCtrl">
    <div class="add-task">
  <input type="text" placeholder="Type then press enter to create task" ng-model="newTask" />
</div>

{{taskList.length}}
<div class="task-list" >
  <a class="task" ng-repeat="task in taskList" ><span class="text">{{ task }}&nbsp;</span></a>
</div>
  </body>