Angular2学习笔记.3、通过模板调用Controller事件实现用户输入和显示,UserInput

通过模板调用Controller事件实现用户输入和显示

本篇的内容会比较少,但是遵循着官方教程的步骤,还是单独发出来吧。这个工程实现了将用户在<input>中的输入传入到Controller的相应事件,并把它在也变其他地方显示出来。
参考官方文档

工程结构

关于对工程结构的相关约定在前两篇笔记已有详细约定,以后也不再赘述。

/  
|-package.json  
|-index.html  
|-node_modules/  
  |-libraries  
  |-...  
|-UserInput/
  |-index.html
  |-app/
    |-main.js

为了精简,这个工程没有使用之前介绍的模板分离和Model注入,仅仅对所要涉及的内容进行展示,以后也是如此。
工程示例

正文

Angular中的用户输入依赖DOM event(事件)驱动。你可以使用原生事件,例如click,mouseover和keyup。Angular使用一种特殊的syntax(语法)来对DOM元素注册事件。
事件语法开始于被圆括号包裹的事件名称,一个控制器的函数assign(分配)给这个事件名称。

<input #myname (keyup)="foo">
<p>{{myname.value}}</p>

#myname在模板中创建了一个局部变量,我们可以在下面的<p>中引用这个变量。当或可以keyup事件时,(keyup)通知Angular去trigger(触发)更新。{{myname.value}}<p>的text node(节点)和输入值绑定。当你修改<input>中的数据时,它会同步的显示在下面的<p>中。
此时(2016-2-20),官方文档中使用的是(keyup)而不是(keyup)="foo",这不能正常运行。
(keyup)可以改为(mouseover)或其他事件,如果为(mouseover),那么Angular会在鼠标经过时更新内容,而不是在按键抬起时。
foo在这里是无意义的,但是不能为空。

构建工程

下面实现这次的UserInput工程,这个工程会首先显示一个列表,接着下面有一个<input>和一个<button>,当输入内容后,点击按钮会将输入的内容插入到上方列表。也可以在输入内容后按回车键,同样会将内容插入到列表,还会将输入框清空。
建立/UserInput/index.html:

<html>
  <head>
    <title>User Input</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- 1. Load libraries -->
    <!-- IE required polyfill -->
    <script src="/node_modules/es6-shim/es6-shim.min.js"></script>

    <script src="/node_modules/angular2/bundles/angular2-polyfills.js"></script>
    <script src="/node_modules/rxjs/bundles/Rx.umd.js"></script>
    <script src="/node_modules/angular2/bundles/angular2-all.umd.js"></script>

    <!-- 2. Load our 'modules' -->
    <script src='/UserInput/app/main.js'></script>

  </head>

  <!-- 3. Display the application -->
  <body>
    <todo-list>Loading...</todo-list>
  </body>

</html>

建立/UserInput/app/main.js:

(function(app){

    app.UserInputComponent = 
    ng.core.Component({
        selector:'todo-list',
        template:'<ul>' +
      '<li *ngFor="#todo of todos">' +
      '{{ todo }}' +
      '</li>' +
      '</ul>' +
      '<input #textbox (keyup)="doneTyping($event)">' +
      '<button (click)="addTodo(textbox.value)">Add Todo</button>'
    })
    .Class({
        constructor:function(){ this.todos = ["Eat Breakfast", "Walk Dog", "Breathe"]; this.addTodo = function(todo) { this.todos.push(todo); }; this.doneTyping = function($event) { if($event.which === 13) { this.addTodo($event.target.value); $event.target.value = null; } } }
    });
})(window.app || (window.app = {}));

(function(app){
    document.addEventListener('DOMContentLoaded',function(){
        ng.platform.browser.bootstrap(app.UserInputComponent);
    });
})(window.app || (window.app = {}));

在/下运行”npm start”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值