1:首先引入vue.js

2:点击事件

<div id='clickVue'>
  <p>{{message}}</p>
  <button v-on:click="reverseMessage">逆转文字</button>
</div>

var app = new Vue({
  el: "#clickVue",
  data: {
    message: 'Hello Vue.js!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})

在reverseMessage方法中,我们更新了应用的状态,但没有操作dom节点,所有的dom操作都由vue来处理,你只需要注意编写底层逻辑。

3:组件化应用构建

(1):在vue里,一个组件本质上是一个有用预定义选项的一个vue实例,在vue中注册组件:

vue.component('todo-item',{

  template: "<li>这是一个正在被注册的组件</li>"

})

现在你可以用它构建另一个组件模板:

<ol>

// 创建一个 todo-item 组件的实例

  <todo-item></todo-item>

</ol>

全部代码如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script src="vue.js"></script>

</head>

<body>

  <div id='componentTest'>

    <todo-item></todo-item>

  </div>

</body>

<script>

//注册模板

Vue.component('todo-item',{

  template: "<li>这是一个模板</li>"

})

var app = new Vue({

  el:'#componentTest'

})

</script>

</html>

上诉代码中:Vue.component()注册一个组件,在vue对象componentTest中,使用了这个组件。运行代码得到:

4:组件的绑定的值从父作用域获取

但是这样会为每个代办项渲染同样的文本,这样看起来并不炫酷,我们应该能将数据从父作用域传到子组件。下面修改一下组件的定义,使之能够接受一个属性。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="vue.js"></script>
</head>
<body>
  <ol id='componentTest'>
    <todo-item v-for='item in groceryList' v-bind:todo='item'></todo-item>
  </ol>
</body>
<script>
//注册模板
Vue.component('todo-item',{
  props:['todo'],
  template: "<li>{{ todo.text }}</li>"
})
var app = new Vue({
  el:'#componentTest',
  data: {
    groceryList: [
      {
      text: '素材'
      },
      {
      text: '文章'
      },
      {
      text:'单词'
      }
    ]
  }
})
</script>
</html>

代码分析:注册的组件为todo-item,在vue对象conponentTest中引用了这一组件,v-for=' item in groceryList ',是从父作用域(componentTest)中循环取groceryList内的值,并将todo与item绑定,

这样一来 todo.text可以理解为item.text in groceryList,循环取值,每次取到的是 ‘素材’,‘文章’,‘单词’三项。

如果没有{{todo.text}} 而是{{todo}},那么得到的是

整个代码分析:

明确需求:我们需要在todo-item中动态从父作用域获取数据。

首先我们需要在componentTest中引入组件todo-item,于是 我们就在body中写了:

<todo-item></todo-item>

其次 我们需要注册组件:

Vue.componet('todo-item' , {

  template: " <li> {{ activeData }} </li> "

})

现在,我们想要组件todo-item循环显示一组动态数据,而这组数据来自其父作用域,而这个数据又是一组数组。于是,在todo-item组件中 写 v-for = item in groceryList ,此时并把todo绑定给item。

但是 我们需要将groceryList 中的数据循环显示出来,因为groceryList 的数据并不在注册的组件todo-item中,于是写了 v-for = item in groceryList 这样,从groceryList中取数据 ,我们可以通过控制台打印

可以看到 groceryList数据是在模板app中。

在注册todo-item时 我们增加其属性 props:【todo】,这个属性被组件用作了{{todo值}},在模板中 我们用v-bind: todo = item即是把item赋值给todo 那么这样一来item组件里的 {{todo.text}}就等于{{item.text}},所以 组件todo-item就从父作用域中获得到groceryList里的值。

我们已经设法将应用分割成了两个更小的单元,子单元通过props接口实现了与父单元的解耦。现在,我们进一步为todo-item组件实现更复杂的模板和逻辑的改进,而且不会影响到父单元。

我们可以想象一个大型应用中,组件的应用模板应该是什么样的

<div id="app">
  <app-nav></app-nav>
  <app-view>
    <app-sidebar></app-sidebar>
    <app-content></app-content>
  </app-view>
</div>

与自定义元素的关系

你可能已经注意到 Vue 组件非常类似于自定义元素——它是 Web 组件规范的一部分,这是因为 Vue 的组件语法部分参考了该规范。例如 Vue 组件实现了 Slot API 与 is 特性。但是,还是有几个关键差别:

  1. Web 组件规范仍然处于草案阶段,并且尚无浏览器原生实现。相比之下,Vue 组件不需要任何补丁,并且在所有支持的浏览器(IE9 及更高版本)之下表现一致。必要时,Vue 组件也可以包装于原生自定义元素之内。

  2. Vue 组件提供了纯自定义元素所不具备的一些重要功能,最突出的是跨组件数据流,自定义事件通信以及构建工具集成。

vue.js初学(一) vue的入门编程的更多相关文章

  1. Vue.js——60分钟组件快速入门(上篇)

    组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HTML ...

  2. 转: Vue.js——60分钟组件快速入门(上篇)

    转自: http://www.cnblogs.com/keepfool/p/5625583.html Vue.js——60分钟组件快速入门(上篇)   组件简介 组件系统是Vue.js其中一个重要的概 ...

  3. Vue.js——60分钟组件快速入门

    一.组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HT ...

  4. 【转】Vue.js——60分钟组件快速入门(上篇)

    文章作者:keepfool 文章出处:http://www.cnblogs.com/keepfool/ 组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的 ...

  5. Vue.js——60分钟组件快速入门(上篇)二

    来源:https://www.cnblogs.com/keepfool/p/5625583.html 组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小 ...

  6. Vue.js——60分钟组件快速入门(下篇)

    概述 上一篇我们重点介绍了组件的创建.注册和使用,熟练这几个步骤将有助于深入组件的开发.另外,在子组件中定义props,可以让父组件的数据传递下来,这就好比子组件告诉父组件:"嘿,老哥,我开 ...

  7. Vue.js——60分钟组件快速入门(下篇)

    转自:https://www.cnblogs.com/keepfool/p/5637834.html 概述 上一篇我们重点介绍了组件的创建.注册和使用,熟练这几个步骤将有助于深入组件的开发.另外,在子 ...

  8. Vue.js 2 vs Vue.js 3的实现 – 云栖社区

    Vue.js 2 vs Vue.js 3的实现 – 云栖社区 vue.js核心团队已经讨论过将在Vue3实现的变化.虽然API不会改变,但是数据响应机制(译者注:对数据改变的监听和通知)发生了变化.这 ...

  9. vue.js最最最基础的入门案例

    打算自己写一点vue.js从入门到进阶的笔记,方便一些新手从头开始开发的时候,可以参考一下. 写的或许是很简单的文章,提供给新手参考.暂时都是一些入门级别的. 以后会慢慢的加深,进阶,写出一些更好,更 ...

随机推荐

  1. 【HackerRank】Utopian tree

    The Utopian tree goes through 2 cycles of growth every year. The first growth cycle of the tree occu ...

  2. php多个数组同键名键值相加合并

    //任意多个相同键值的数组合并相加 //预先将所要合并的数组组装成一个新的数组 // $arr = array( // array( // 'user_id' => 100, // 'goods ...

  3. INDEL的重新比对和碱基质量分数的重新校准

    1.为什么要做这两步(why): indel的重新比对:这是由于比对软件的自身限制,其可能将包括indel的read解释为snp的read,这就导致calling的错误和后面的碱基质量分数的重新校准. ...

  4. awk的逻辑运算符

    运算符 描述 赋值运算符 = += -= *= /= %= ^= **= 赋值语句 逻辑运算符 || 逻辑或 && 逻辑与 正则运算符 ~ ~! 匹配正则表达式和不匹配正则表达式 关系 ...

  5. Spring-data-jpa常用方法

  6. C#将字符转换成utf8编码 GB321编码转换

    public static string get_uft8(string unicodeString) { UTF8Encoding utf8 = new UTF8Encoding(); Byte[] ...

  7. Linux嵌入式 -- Bootloader , Uboot

    1. Bootloader作用 PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成.BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交 ...

  8. ANT+JMETER集成3 (添加邮件附件)

    在build.xml文件<email>中加入下面几行代码 <fileset dir="C:\apache-jmeter-3.0\html/"> <in ...

  9. DEDE整站动态化或整站静态化设置方法

    简单说下的是,网站空间小而数据库还可以的话,使用动态浏览也是不错的,但是官方的程序默认的生成静态浏览的,只要一发布文章,就会自动生成静态页面,难道做发布文章还要一个一个去更改其他的设置吗?麻烦.对于采 ...

  10. SQL授权语句(MySQL基本语句)

    看他们网上的,写得都是千篇一律,同时,好多也写得不是很好,下面是我自己总结的有关mysql的使用细节,也是我在学习过程中的一些记录吧,希望对你有点帮助,后面有关存储过程等相关操作还没有总结好,下次总结 ...