Vue.js

作者:烨竹

本文参考:
https://vuejs.org/v2/guide/list.html
http://www.runoob.com/vue2/vue-forms.html

Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件
生命周期详解:https://blog.csdn.net/qq_25186543/article/details/79470184

Vue.js_第1张图片

基本语法:

一、结构:
Vue.js 是个专注在视图层(View) 的框架,帮助开发者切分前端的资料状态和运作逻辑;(类似土豆变葡萄,土豆是一个整体,而葡萄想吃哪部分都容易,由你决定各自独立运作或是相连)

Vue.js_第2张图片

葡萄自然有个供应养分的起始点,也就是根。让我们三秒看完长怎样

//挂载点为#app,内容为data里面的内容
{{ message }}

二、写法(两种)
1.直接引入Vue.js(template与html混编)

//为例

    
{{ message }}

2.透过Vue-loader 编译(官方工具Vue-cli)

/* Menu.vue */





//使用官方工具Vue-cli,透过几行指令生成基本的专案环境
# 全域安装 vue-cli,當成系統命令用
$ npm install --global vue-cli

# 建立webpack樣板專案
$ vue init webpack my-project
# 若你剛開始學或不需要測試,簡化版本比較好懂
$ vue init webpack-simple my-project

# 安裝所需模組
$ cd my-project
$ npm install

# 開啟 http server
$ npm run dev

三、挂载点(Vue Instance)

const vm = new Vue({
    el: 'app',             /* 掛載點 */
    data: { /* ... */ },   /* 初始資料 */
    methods: { /* ... */}, /* 方法 */
});

四、资料绑定(模板相关语法)

    
    

{{ msg }}

{{ msg }}

{{ data | json }} {{ username | capitalize }}

五、指令
1.样式套用
能取到的Vue属性都能当作传入参数(v-bind)

i.绑定Class

①.简单

//基本写法以JSON传入,当对应的数值为true时套用,false时移除该类别




Vue 测试实例 - 菜鸟教程(runoob.com)




②、复杂(class并非固定,可改用Array传入)




Vue 测试实例 - 菜鸟教程(runoob.com)




ii、绑定inline-style





Vue 测试实例 - 菜鸟教程(runoob.com)



菜鸟教程

2.条件显示
UI流程常有特定情况才出现/隐藏DOM 或Component 的需求,Vue 对应写法是
v-if / v-show
v-else
v-else-if





Vue 测试实例 - 菜鸟教程(runoob.com)



A
B
C
Not A/B/C

v-if,v-show区别
v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——在条件第一次变为真时才开始局部编译(编译会被缓存起来)
相比之下,v-show 简单得多——元素始终被编译并保留,只是简单地基于 CSS 切换。
一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变 v-if 较好
3、列表渲染( v-for又称循环语句)





Vue 测试实例 - 菜鸟教程(runoob.com)



//对象




Vue 测试实例 - 菜鸟教程(runoob.com)



  • {{ index }}. {{ key }} : {{ value }}
//整数




Vue 测试实例 - 菜鸟教程(runoob.com)



  • {{ n }}

4、事件处理(v-on)





Vue 测试实例 - 菜鸟教程(runoob.com)



5、表单输入绑定( v-model )





Vue 测试实例 - 菜鸟教程(runoob.com)



input 元素:

消息是: {{ message }}

textarea 元素:

{{ message2 }}

//复选框

单个复选框:

多个复选框:


选择的值为: {{ checkedNames }}

六、过滤器
2.0版本中,过滤器只用于插入文本中({{}})

{{ message | capitalize }}

自定义过滤器



七、Watch
简单理解:我们希望变数改变时,也有人叫对应的处理器起床做事,这就是Watch 的用途




    
    Vue 测试实例 - 菜鸟教程(runoob.com)
    

   
      
千米 : 米 :

八、计算属性(computed)
特性:当我们定义一个computed,其相依data 一变,computed 也会随之更新。好处:收纳Template中的逻辑





Vue 测试实例 - 菜鸟教程(runoob.com)



{{ message.split('').reverse().join('') }}

computed vs methods
computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值;而使用 methods (其相依的data改变,computed也随之更新),在重新渲染的时候,函数总会重新调用执行

九、组件(Component)
使用组件有三个步骤:宣告建构子(Constructor);注册组件(Regist Component) (建立组件(Create Component));挂载组件(Mount Component)
1、注册(组件存在意义是为了拆解逻辑、使得结构清晰好懂)
全局组件:所有实例都能用全局组件





Vue 测试实例 - 菜鸟教程(runoob.com)



局部组件





Vue 测试实例 - 菜鸟教程(runoob.com)



Vue.extend

2、prop
原本功能间的协同运作都在同一层,拆成组件后,变成各个独立的状态了,我们仍然需要维持彼此间沟通畅通,如同所有漂亮的JavaScript 模组一样,需要订出漂亮的对外介面(Interface),使其改动内部逻辑的同时,又不失其重用性(环保可回收),方便传入外部资料;官方建议使用props down, events up,透过prop传入资料、透过组件事件(event)传递消息,template用于呈现资料

Vue.js_第3张图片

对上图的解释:
右边:data (宣告内部状态);props (宣告对外介面- 用于传入资料);prop:接收父组件传递的值;
左边:自用,broadcast (父对子,向下传递),$dispatch (子对父,向上传递)

總來客量: {{ total }}

template
要怎么让组件样板具有弹性
解法一 具名



    
    
    

One fine body…

解法二- inline-template(这种作法会完全覆盖掉原始内容)


  

These are compiled as the component's own template.

Not parent's transclusion content.


  

These are compiled as the component's own template.

Not parent's transclusion content.

3、挂载
透过模板(template)的基本挂载:


is屬性动态挂载:

透过Vue建构子或$mountAPI:


var Example = Vue.extend({
 template: '
Here is Example
' });
透过建构子挂载

new Example({ el: '#app' })
挂载前的等效样板

挂载后

给$mount挂载点

new Example().$mount('#app');
跟(1)相同,完全换掉#app内容

当你加上新的组件,又不想盖掉原内容,参考这种做法
4、其他
i、组件(component)间的其他连结
①、children/children直接存取其下一层的子组件。
子组件可透过 root,直接存取最顶层的Vue Instance
②、ref属性& $refs
第二个直接连结是组件的自订索引名- ref,用于父组件对子组件的参照。

定义好的索引名,可以透过父组件的$refs取得

var parent = new Vue({ el: '#parent' })
/* 存取子組件 */
var child = parent.$refs.profile

若是搭配v-for,$refs对应的索引名也会取得阵列/JSON

typeof parent.$refs.profile /* Array */

这个属性在画面渲染完才会更新,资料可能不同步,只适合当备用方案
ii、
加速组件编译

  • v-once
    一次性编译,用于不会改变的静态资料
  • v-pre
    跳过不编译,用于不会改变的静态样板

你可能感兴趣的:(Vue.js)