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. 计算机网络概述 传输层 TCP流量控制

    TCP流量控制 所谓流量控制就是让发送发送速率不要过快,让接收方来得及接收.利用滑动窗口机制就可以实施流量控制.通过运用TCP报文段中的窗口大小字段来控制,发送方的发送窗口不可以大于接收方发回的窗口大 ...

  2. Squid 安装

    Squid简介 Squid是比较知名的代理软件,它不仅可以跑在linux上还可以跑在windows以及Unix上,它的技术已经非常成熟.目前使用Squid的用户也是十分广泛的.Squid与Linux下 ...

  3. Java 访问修饰符总结

    Java中的访问修饰符 Java面向对象的基本思想之一是封装细节并且公开接口. Java语言采用访问控制修饰符来封装类及类的方法和属性的访问权限,从而向使用者暴露接口.隐藏细节. Java访问控制分为 ...

  4. Why does typeof array with objects return “Object” and not “Array”?

    https://stackoverflow.com/questions/4775722/check-if-object-is-an-array One of the weird behaviour a ...

  5. 【codevs2333】&【BZOJ2002】弹飞绵羊[HNOI2010](分块)

    我其实是在codevs上看到它的题号后才去做这道题的...2333... 题目传送门:codevs:http://codevs.cn/problem/2333/ bzoj:http://www.lyd ...

  6. QT XML文档的解析 QXmlStreamReader, DOM,SAX 三种解析方法 简单示例

    0. xml文档如下 <?xml version="1.0"?> <bookindex> <entry term="sidebearings ...

  7. openstack-ansible Chapter 4. Deployment configuration

    Initial environment configuration Copy the contents of the /opt/openstack-ansible/etc/openstack_depl ...

  8. 碰到错误Could not load the Tomcat server configuration at \Servers\MyEclipse Tomcat v8.5-config. The Servers project is closed.

    本人用的myeclipse是2017版. 可能解决的方法是: 双击MyEclipse Tomcat v8.5,然后就会弹出以下窗口,

  9. review09

    String类在java.lang包中,由于java.lang包中的类被默认引入,所以可以直接使用String类.String对象的创建可以直接使用带字符串参数的构造方法 String s = new ...

  10. Composer如何安装(安装注意事项)

    Composer如何安装(安装注意事项) 一.总结 一句话总结:安装的时候主要看安装错误提示: 常见的错误有: a.php需要开启openssl配置.我们打开php目录下的php.ini.将opens ...