根 vue 实例

  1. let viewModel = new Vue({
  2. // 包含数据、模板、挂载元素、方法、生命周期钩子等选项
  3. })

Hello Wrold 

  1. <!-- 这是我们的 View -->
  2. <div id="app">
  3. Hello {{ name }}!
  4. </div>
  5. // 这是我们的 Model
  6. var model = {
  7. name: 'Vue.js'
  8. }
  9.  
  10. // 创建一个 Vue 实例或 "viewModel"
  11. // 它连接 View 与 Model
  12. var viewModel = new Vue({
  13. el: '#app',
  14. data: model
  15. })

生命周期

 

上图的就是ViewModel的生命周期,仔细的看其实并不难。目前先了解一下。

 

流程大致像这样

  1.  
  1. created()->beforeCompile()->compiled()->ready()->attached()->detached()->beforeDestroy()->destroyed()
  1.  
  1. 更详细的介绍,请点这里查看API文档

绑定

简单的理解就是模板字符串功能,放心的在任何你想用的地方去用,假如错了vue会给你提示。

定界符都是可以修改的

  1. // 模板定界符
  2. Vue.config.delimiters = ['{{', '}}']
  3.  
  4. // html模板定界符
  5. Vue.config.unsafeDelimiters = ["{{{", "}}}"]

数据的绑定

  1. <span>消息: {{ msg }}</span> <!-- 同步更新js里面的数据 -->
  2.  
  3. <span>他将永不会改变: {{* msg }}</span> <!-- 第一次插入之后就不更新了 -->
  4.  
  5. <div>{{{ raw_html }}}</div> <!-- 插入原生的 html -->
  6.  
  7. <div id="item-{{ id }}"></div> <!-- 放在id中 -->

表达的绑定

不可使用,var/let关键字声明变量,也不能使用if/for流程控制。

  1. {{ number + 1 }} // 做简单的运算
  2.  
  3. {{ ok ? 'YES' : 'NO' }} // 三元表达式
  4.  
  5. {{ message.split('').reverse().join('') }} // 调用该对象上的方法

指令

当其表达式的值改变时把某些特殊的行为应用到 DOM 上。

  1. <p v-if="ok">Hello!</p> <!-- 根据if里面的值,确定是否编译 -->
  2.  
  3. <a v-bind:href="url"></a>
  4. <!-- 等于href="{{url}}" 这里 href 是参数,将元素的 href 属性传进去。
  5. 告诉vue元素的 href 特性跟表达式 url 的值绑定 -->
  6.  
  7. <a v-on:click="doSomething">
  8. <!-- v-on表示监听,传入了click参数,表示当click事件发生的时候,执行doSomething函数 -->
  9.  
  10. <a v-bind:href.literal="/a/b/c"></a>
  11. <!-- .literal 修饰符告诉指令将它的值解析为一个字面字符串而不是一个表达式 -->

v-bind 缩写

  1. <!-- 完整语法 -->
  2. <a v-bind:href="url"></a>
  3.  
  4. <!-- 缩写 -->
  5. <a :href="url"></a>
  6. <!-- 完整语法 -->
  7. <a v-on:click="doSomething"></a>
  8.  
  9. <!-- 缩写 -->
  10. <a @click="doSomething"></a>

过滤器

过滤器提供了一种执行文本转换的方法,比如说都转成大写字母或者几乎做任何我们想做的事情。过滤器既可以在文本插值中使用,也可以在v-bind指令的表达式中使用。

使用Vue,可以有两种不同的方式注册过滤器:全局和本地过滤器

全局过滤器

来看一个简单的示例。下面这个示例演示的是注册一个全局过滤器,其作用就是在价格前面加上美元符号:

  1. // 声明一个全局的过滤器
  2. Vue.filter('toUSD', function (value) {
  3. return `$${value}`
  4. })
  5.  
  6. // 在模板中这样使用 文本插值的使用方式
  7. <div id="app">
  8. <h1>{{ price | toUSD}}</h1>
  9. </div>

  1. 特别声明: 过滤器定义必须始终位于Vue实例之上,否则你将会得到一个“Failed to resolve filter: toUSD”的错误信息。

本过过滤器

本地过滤器被注册到一个Vue组件中。下面这个示例展示了本地过滤器是如何创建的。这个过滤器的功能是将字母变成大写:

  1. let app = new Vue({
  2. el: '#app',
  3. data () {
  4. return {
  5. name: 'hello world !'
  1. }
  2. },
  3. // 声明一个本地的过滤器
  4. filters: {
  5. Upper: function (value) {
  6. return value.toUpperCase()
  7. }
  8. }
  9. })
  10.  
  11. <div id="app">
  12. <h1>{{ name | Upper }}</h1>
  13. </div>

正如上例中看到的,本地过滤器存储在Vue组件中,作过filters属性中的函数。这个时候你想注册多少个就能注册多少个:

  1. let app = new Vue({
  2. el: '#app',
  3. data () {
  4. return {
  5. name: 'hello world !'
  6. }
  7. },
  8. // 声明一个本地的过滤器
  9. filters: {
  10. Upper: function (value) {
  11. return value.toUpperCase()
  12. },
  13. Lower: function (value) {
  14. return value.toLowerCase()
  15. }
  16. }
  17. })

计算属性

  1. <div id="example">
  2. a={{ a }}, b={{ b }}
  3. </div>
  4. var vm = new Vue({
  5. el: '#example',
  6. data: {
  7. a: 1
  8. },
  9. computed: {
  10. // 一个计算属性的 getter
  11. b: function () {
  12. // `this` 指向 vm 实例
  13. return this.a + 1
  14. }
  15. }
  16. })

给计算属性设置setter

  1. computed: {
  2. fullname: {
  3. get: function() {
  4. return this.firstName + ' ' + this.lastName
  5. },
  6. set: function() {
  7. let names = newValue.split(' ')
  8. this.firstName = names[0]
  9. this.lastName = names[names.length - 1]
  10. }
  11. }
  12. }

Class 与 Style 绑定

vue特意增强了他们,支持对象和数组绑定

Class 对象绑定

  1. <div class="static" :class="{ 'class-a': isA , 'class-b': isB}"></div>
  2.  
  3. data: {
  4. isA: true,
  5. isB: false
  6. }
  7.  
  8. <div class="static" :class="classObjcet"></div>
  9.  
  10. data: {
  11. classObject: {
  12. 'class-a': true
  13. 'class-b': false
  14. }
  15. }
  16.  
  17. //渲染之后
  18.  
  19. <div class="static class-a"></div>

Class 数组语法

  1. <div :class="[classA,classB]"></div>
  2.  
  3. data: {
  4. classA: 'class-a'
  5. classB: 'class-b'
  6. }
  7.  
  8. // 渲染为
  9.  
  10. <div class="class-a class-b"></div>
  11.  
  12. <div :class="[classA, isB? classB : '']"></div>
  13.  
  14. // 始终添加classA对应的类名,根据isB的值确认是否添加classB对应的值。
  15.  
  16. // 在1.0.19+之后,为了更明了的写法,支持数组里面嵌套对象语法
  17.  
  18. <div :class="[classA, {classB: isB, classC: isC}]"></div>

Style 对象语法

CSS 属性名可以用驼峰式(camelCase)或短横分隔命名(kebab-case),自动添加浏览器的前缀。

  1. <div :style="{color: activeColor, fontSize: fontSize + 'px' }"></div>
  2.  
  3. data: {
  4. activeColor: 'red',
  5. fontSize: 30
  6. }
  7.  
  8. <div :style="styleObject"></div>
  9.  
  10. data = {
  11. styleObject: {
  12. color: 'red',
  13. fontSize: '13px'
  14. }
  15. }

Style 数组语法

  1. <div :style="[styleObjectA,styleObjectB]"></div>
  2.  
  3. data = {
  4. styleObjectA: {
  5. fontSize: '15px'
  6. }
  7. }

条件渲染

  1. 特别说明: v-else 元素必须立即跟在 v-if v-show 元素的后面——否则它不能被识别。

v-if

  1. <h1 v-if="ok">yes</h1>
  2. <h1 v-else>no</h1>
  3.  
  4. <template v-if="ok">
  5. <h1>Title</h1>
  6. <p>Paragraph 1</p>
  7. <p>Paragraph 2</p>
  8. </template>

v-show

不支持 template 元素包裹

  1. <h1 v-show="ok">Hello!</h1>
  2.  
  3. // 在组件上不能使用 v-else
  4. <custom-component v-show="condition"></custom-component>
  5. <p v-show="!condition">这可能也是一个组件</p>

if 与 show 之间的战争

如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变 v-if 较好。

列表渲染

  1. <ul id="list">
  2. <li v-for="item in items">
  3. {{ item.message }}
  4. </li>
  5. </ul>
  6.  
  7. var vm = new Vue({
  8. el: '#list',
  9. data: {
  10. items: [
  11. { message: 'Foo' },
  12. { message: 'Bar'}
  13. ]
  14. }
  15. })

通过$index可以访问索引,且在v-for块内可以访问的到其他属性。

  1. <ul id="list">
  2. <li v-for="item in items">
  3. {{ parentMessage }} - {{ $index }} - {{ item.message }}
  4. </li>
  5. </ul>
  6.  
  7. var vm = new Vue({
  8. el: '#list',
  9. data: {
  10. parentMessage: 'Parent',
  11. items: [
  12. {message: 'Foo'},
  13. {message: 'Bar'}
  14. ]
  15. }
  16. })

为索引设置一个别名,且 1.0.17+ 之后可以使用 for of

  1. <div v-for="(key,value) of items">
  2. </div>
  3.  
  4. // 使用一层 template 包裹
  5. <template v-for="item in items">
  6. <span>{{ item.id }}</span>
  7. <span>{{ item.content }}</span>
  8. </template>

对象v-for

  1. <ul id="repeat-object" class="demo">
  2. <li v-for="value in object">
  3. {{ $key }} : {{ value }}
  4. </li>
  5. </ul>
  6.  
  7. <div>
  8. <span v-for="n in 10">{{ n }} </span>
  9. </div>

方法与事件处理

  1. <div id="example">
  2. <button @click="greet">Greet</button>
  3. </div>
  4.  
  5. let vm = new Vue({
  6. el: '#example',
  7. data: {
  8. name: 'Vue.js'
  9. },
  10. methods: {
  11. greet: function(event) {
  12. alert('hello'+this.name+'!')
  13. console.log(event.target.tagName)
  14. }
  15. }
  16.  
  17. })
  18.  
  19. <div id="example">
  20. <button :click="say('hi')">Say Hi</button>
  21. <button :click="say('what')">Say What</button>
  22. </div>
  23.  
  24. new Vue({
  25. el: '#example',
  26. methods: {
  27. say: function(msg) {
  28. alert(msg)
  29. }
  30. }
  31. })

事件修饰符

在事件处理器中经常需要调用event.preventDefault 或 event.stopPropagation

  1. // 阻止单击事件冒泡
  2. <a @click.stop="do"></a>
  3.  
  4. // 提交事件不再重载页面
  5. <a @submit.prevent="submit"></a>
  6.  
  7. // 修饰符可以串联
  8. <a @click.stop.prevent="do"></a>
  9.  
  10. // 只有修饰符
  11. <form @submit.prevent></form>

按键修饰符

  • enter
  • tab
  • delete
  • esc
  • space
  • up
  • down
  • left
  • right
  1. <!-- 只有在 keyCode 是 13 时调用 vm.submit() -->
  2. <input v-on:keyup.13="submit">
  3.  
  4. <!-- 同上 -->
  5. <input v-on:keyup.enter="submit">
  6.  
  7. <!-- 缩写语法 -->
  8. <input @keyup.enter="submit">

自定义按键别名

  1. // 可以使用 @keyup.f1
  2.  
  3. Vue.directive('on').keyCodes.f1 = 112

简单易懂的 Vue.js 基础知识 !的更多相关文章

  1. vue.js基础知识篇(7):表单校验详解

    目录 网盘 第12章:表单校验 1.npm安装vue-validator $ npm install vue-validator 代码示例: var Vue=require("vue&quo ...

  2. vue.js基础知识篇(6):组件详解

    第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 V ...

  3. vue.js基础知识篇(5):过渡、Method和Vue实例方法

    第8章:过渡 1.CSS过渡 2.JavaScript过渡 3.渐进过渡 第9章:method Vue.js的事件一般通过v-on指令配置在HTML中,虽然也可以在js的代码中使用原生的addEven ...

  4. vue.js基础知识篇(4):过滤器、class与style的绑定2

    代码下载:网盘 欢迎私信 第一章:过滤器 过滤器是对数据进行处理并返回结果的函数. 1.语法 语法是使用管道符"|"进行连接.过滤器可以接收参数,跟在过滤器后面,带引号的参数被当做 ...

  5. vue.js基础知识篇(3):计算属性、表单控件绑定

    第四章:计算属性 为了避免过多的逻辑造成模板的臃肿不堪,可使用计算属性来简化逻辑. 1.什么是计算属性 <!DOCTYPE html><html lang="en" ...

  6. vue.js基础知识篇(2):指令详解

    第三章:指令 1.语法 指令以v-打头,它的值限定为绑定表达式,它负责的是按照表达式的值应用某些行为到DOM上. 内部指令有v-show,v-else,v-model,v-repeat,v-for,v ...

  7. vue.js基础知识篇(1):简介、数据绑定

    目录第一章:vue.js是什么? 第二章:数据绑定第三章:指令第四章:计算属性第五章:表单控件绑定代码链接: http://pan.baidu.com/s/1qXCfzRI 密码: 5j79 第一章: ...

  8. Vue.js 基础知识

    0. Vue.js 是轻量级的MVVM框架: 1. index.html:<app></app>:组件载入:入口文件会默认调用一个 main.js: 2. App.vue:入口 ...

  9. Vue.js基础知识

    <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml&q ...

随机推荐

  1. linux和Windows下用sublime text3编译运行C,C++

    安装MinGW 1.首先安装MinGW,默认安装位置是C:\MinGW. 2.安装完成后,右键“我的电脑”->属性 ->高级->环境变量,在系统环境变量PATH里添加C:\MinGW ...

  2. pjax转发

    pjax几大特点: 1.异步(ajax) 2.地址栏改变路径 3.实现前进和后退back和forword 如何解决:地址变了之后,万一F5刷新的问题,主要是通过后台判断是否为pjax请求,是的话做个标 ...

  3. 【题解】Luogu P2730 魔板

    蒟蒻的第一道蓝题--好像也没有蓝的程度 一篇无STL的超弱题解(入门写法无误了QAQ 传送门 很经典的一道BFS 这是初始状态. 操作A 操作B 操作C 思路1 不使用cantor展开的情况 1. 对 ...

  4. jQuery 筛选器2

    jQuery 筛选器2 // 由于$()只能输入字符串$('#li:eq(1)'),可通过.eq()来传入. // 获取this标签中的指定属性 $(this).eq(1) // 获取第一个元素 $( ...

  5. es日常维护

    1.查看es日志curl -XGET http://10.26.41.60:9200/xdm-logs-2018.08.22?pretty=true 2.删除es日志curl -XDELETE 'ht ...

  6. 3. Dubbo原理解析-Dubbo内核实现之动态编译 (转)

    转载自  斩秋的专栏  http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 我们运行的Java代码,一般都是编译之后的字节码 ...

  7. 剑指offer(61)序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 题目分析 首先拿到题目时候,我先想到的是什么是序列化二叉树?序列化主要就是在前后端交互时候需要转换下,毕竟网络传输的是流式数据(二进制或者文本 ...

  8. 《Visual C#从入门到精通》第四章使用复合赋值和循环语句——读书笔记

    第1章 使用复合赋值和循环语句 4.1 使用复合赋值操作符 任何算术操作符都可以像这样与赋值操作符合并,从而获得复合赋值操作符. 不要这样写 要这样写 Variable=Variable*number ...

  9. EXCEL中把两列表格里的数字合成一列并且中间用逗号隔开

    背景:使用loadrunner做参数化时,往往需要在excel表格中做数据,比如:第一列是用户名,第二列是密码,格式如下: 再将用户名和密码合并成一列,以逗号分隔,需要用到的公式为: =A1& ...

  10. z2-xcode使用

    @xcode区块命名 左边导航栏,右边工具栏,下边调试栏 @快捷键 最常用的#显示/隐藏导航栏:Command+ (反选一样Command+) #显示/隐藏工具栏:Command+Option+ (反 ...