原文引自 Vue 官方教程 :https://cn.vuejs.org/v2/guide/javascript
Vue.js 是一套构建用户界面的渐进式框架。采用的是自底向上增量开发的设计(与其余重量级框架不一样点)。Vue的核心库只关注图层,不只易于上手,还便于与第三方库或既有项目整合。html
<script src = './vue.js'><script> <div id = 'app> <p> {{ message }} </p> </div> <script> var app = new Vue({ el: '#app', message: 'helloword!!!' }) <script>
元素属性:经过v-bind绑定 例如v-bind:title="哈哈哈"vue
v-for (结构到数据)java
v-model 实现表单输入和应用状态之间的双向绑定api
computed: { // a computed getter reversedMessage: function () { // `this` points to the vm instance return this.message.split('').reverse().join('') } }
filters: { 过滤器函数 }数组
在Vue里,一个组件本质上是一个拥有预约义选项的一个Vue实例缓存
var vm = new Vue({ //选项 })
全部的 Vue.js 组件其实都是被扩展的 Vue 实例app
不要在实例属性和回调函数中箭头函数,由于箭头函数绑定父上下文,this不会像预想的同样是Vue实例框架
Vue.js 是否有“控制器”的概念?答案是,没有。dom
也能够不用模板,直接写渲染(render)函数,使用可选的JSX语法
使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新
注意:你的站点上动态渲染的任意 HTML 可能会很是危险,由于它很容易致使 XSS 攻击。请只对可信内容使用 HTML 插值,毫不要对用户提供的内容插值。
对id,布尔值的属性有效
<!-- 这是语句,不是表达式 --> {{ var a = 1 }} <!-- 流控制也不会生效,请使用三元表达式 --> {{ if (ok) { return message } }}
注意:模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如 Math 和 Date 。你不该该在模板表达式中试图访问用户定义的全局变量。
是带有v-前缀的特殊属性
一个指令能接受一个参数,在指令后面以冒号指明
<form v-on:submit.prevent="onSubmit"></form>
<!-- in mustaches --> {{ message | capitalize }} <!-- in v-bind --> <div v-bind:id="rawId | formatId"></div>
能够接受参数
<!-- 完整语法 --> <a v-on:click="doSomething"></a> <!-- 缩写 --> <a @click="doSomething"></a>
<!-- 完整语法 --> <a v-bind:href="url"></a> <!-- 缩写 --> <a :href="url"></a>
methods:只要发生从新渲染, method调用总会调用执行该函数
缺点:命令式和重复式。更多选择 computed 属性
计算属性默认只有getter,根据需求也能够提供一个setter
也能够绑定一个计算属性
<div v-bind:class="[activeClass, errorClass]">
data: { activeClass: 'active', errorClass: 'text-danger' }
直接绑定到一个样式对象
<div v-bind:style="[baseStyles, overridingStyles]">
当 v-bind:style 使用须要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。
<template v-if="ok"> <h1>Title</h1> <p>Paragraph 1</p> <p>Paragraph 2</p> </template>
v-else 元素必须紧跟在 v-if 或者 v-else-if 元素的后面——不然它将不会被识别。
相似于 v-else,,v-else-if 必须紧跟在 v-if 或者 v-else-if 元素以后。
还有别的好处,见官网
注意: 不支持 语法,也不支持v-else。
v-show:无论初始条件是什么,元素始终会被渲染;更高地初始渲染开销
v-for 具备比 v-if 更高地优先级
<li v-for="(item, index) in items">
<li v-for="value in object">
<span v-for="n in 10">{{ n }}</span>
+ <my-component v-for="item in items"></my-component>
<div v-for="item in items" :key="item.id"> <!-- 内容 --> </div>
key 并不特别与 v-for 关联,key 还有其余用途
当你修改数组的长度时,例如: vm.items.length = newLength
若是想要显示一个数组的顾虑或者排序的副本,而不是实际改变或重置原始数据。=>建立返回过滤或排序数组的计算属性
v-on:click="counter += 1"
v-on:click="greet"
v-on:click="say('hi')"
.once() 点击事件将只会触发一次
<input v-on:keyup.13="submit">
<input v-on:keyup.enter="submit">
Vue.config.keyCode.f1 = 112
.meta
当一个ViewModel被销毁,全部的时间处理器都会自动被删除,无需担忧本身如何清理它们
注意:v-model 不关心表单控件初始化所生成的值。由于它会选择 Vue 实例数据来做为具体的值。
input type=“text”
textarea
label for=“hello”
label for=“hello”
option
v-bind:value=“a”
<input v-model.lazy="msg" >
<input v-model.number="age" type="number">
<input v-model.trim="msg">
在较高层面上,组件是自定义元素,Vue.js 编译器为它添加特殊功能。在有些状况下,组件也能够是原生 HTML 元素的形式,以 is 特性拓展
Vue.component('my-component', { // 选项 })
确保初始化以前注册组件
new Vue({ // ... components: { // <my-component> 将只在父模板可用 'my-component': Child } })
<u l> ,<o l>,<t a b l e> ,<s e l e c t> 限制了能被它包裹的元素, 而一些像 <o p t i o n> 这样的元素只能出如今某些其它元素内部。解决方案:使用特殊的 is 属性
<table> <tr is="my-row"></tr> </table>
+ <script type="text/x-template"> + JavaScript内联模版字符串 + .vue 组件
data: function () { return { counter: 0 } }
父子组件:组件 A 在它的模板中使用了组件 B。它们的关系能够总结为 props down,events up。父组件经过 props 向下传递数据给子组件,子组件经过 events 给父组件发送消息。
子组件使用父组件的数据,须要经过子组件的 props 选项
<!-- 传递了一个字符串 "1" --> <comp some-prop="1"></comp>
<!-- 传递实际的 number --> <comp v-bind:some-prop="1"></comp>
props: ['initialCounter'], data: function () { return { counter: this.initialCounter } }
props: ['size'], computed: { normalizedSize: function () { return this.size.trim().toLowerCase() } }
注意在 JavaScript 中对象和数组是引用类型,指向同一个内存空间,若是 prop 是一个对象或数组,在子组件内部改变它会影响父组件的状态。
父组件是使用 props 传递数据给子组件,但若是子组件要把数据传递回去,应该怎样作?那就是自定义事件!
v-on:click.native="doThing"
在复杂的状况下,咱们应该考虑使用专门的状态管理模式
为了让组件能够组合,咱们须要一种方式来混合父组件的内容和子组件本身的模板,这个过程叫作内容分发,使用
keep-alive
Slots 容许外部环境将额外的内容组合在组件中。
-这在有不少模版或者小的应用中有用,不然应该避免使用,由于它将模版和组件的其余定义隔离了。