Vue学习笔记和代码记录

## 安装javascript

* 直接引入连接:建议初学者使用;
* 经过node.js的NPM安装Vue;
* 经过node.js的NPM安装Vue-cli脚手架(推荐安装方式);css


## 基础html

### 数据类型前端

* 字符串:title: 'hello world';
* 数字:num:123;
* 数组:arrow: ['apple', 'banana','orange'];
* 对象:name: {firstName:'ming',lastName:'Li'};
* 布尔值:true/false;vue


### 模版数据绑定java

* {{ xxx }}:模版解析;
* v-text:文本绑定;
* v-model:数据双向绑定;v-model.lazy:延迟对数据进行更新;
- v-model.number:对输入的数据字符串转为数字;
- v-model.trim:对数据进行裁剪,去除空格等node


### 表单数据绑定webpack

- checkbox:储存的数据类型是数组;
- radio:储存的数据类型是字符串;
- select:存储的数据类型是字符串;ios


### 标签属性es6

* v-bind:标签属性绑定,属于动态绑定,能够简写为:。绑定后的属性为变量,能够是字符串,数组或者是对象;
* v-if/v-if-else-if/v-else:条件渲染,若是成立则执行,不成立则注销;
* v-show:一样是条件渲染,不一样的是不成立是隐藏而不是注销;


### 事件绑定

* 经过v-on:event="eventName"进行绑定,可简写为@:event="eventName";方法经过在methods里进行方法定义;
* 在v-on:event.midiflyer添加修改器;
* 自定义事件:v-on:diyEvent="eventName",经过$emit来触发自定义事件。`methods: {my-function () {this.$emit('diyEvent'), 参数}}`;


### 计算属性和数据监听
* 传值属性:props: ['xx','xx']。父子组件若是须要传值,必需要在props里进行定义;
* 事件属性:methods: {}。全部事件都在这里进行定义;不少状况下在执行事件时须要取消默认事件。function(e){e.preventDefault();};
* 计算属性:computed: {方法 () { return 方法 }};计算属性的优势:能够直接根据data的属性动态的更改(data中myValue的值变化会同步反映到计算属性里)(计算属性会缓存所依赖的那个值,直到那个值发生变化,不然不会从新取值)与方法调用的缺点:调用方法的时候才会更新,即便data中myValue的值没有变化,调用时依然会去从新取值。使用场景:在耗时、大量搜索的状况下使用,减小dom重复渲染的性能支出。
* 建立属性:created:function(){}。方法不须要手动调用,直接执行。
* 数据监听:watch: { 方法 () {}};


### 应用
#### 动态绑定class
* v-bind:class="{red:true}";
* v-bind:class={changeClass:changeClass};
* v-bind:class={active ? true : false}

## 组件

### 命名

* 不强制要求按照W3C规则进行命名,但最好遵循。例如:`my-template`;
* 无论组件是大驼峰仍是小驼峰,在模版引用的时候一概要转为中横线的命名方式。例如:组件为`comName`,引用时为:`<com-name></com-name>`;在传递属性时名称也一样。


### 注册

* 全局注册:`Vue.component('my-template', {template: '...'});` html:`<my-template></my-template>`
* 局部注册:只在使用的场景进行注册。`var myTemplate = {template: '...'}; new Vue({..., components: {'my-template: myTemplate'}})`


### 模版解析

* 特殊标签下的模版须要注意,好比table、ol、ul、select等标签,使用`is`进行挂载。例如:`<table><tr is="my-tr"></tr></table>`;
* 推荐使用字符串模版:
+ `<script type="text/x-template">`;
+ javascript内联模版字符串;
+ vue组件;

* 组件中的data必须是函数。


### 组件组合

* 父组件经过prop进行向下传递;
* 子组件经过事件进行发送信息,子组件触发事件,父组件进行监听;
* 传值时要主要命名的选择和使用,使用props使用的驼峰式明显须要转变为对应的中横线式。`Vue.component('my-template', {props: ['myMessage'],template: '...'}); <my-template my-message="hello"></my-template>`
* 字面量语法和动态语法;
* slot插槽:父组件向子组件插入template模板,父子之间经过slot属性和name属性进行对应`<p slot="header">我是header</p><span slot="footer">我是footer</span>`;
* 动态组件:利用 `:is = ""` 进行组件的动态绑定,外层能够用内置组件keep-alive 来进行缓存;


### 总结

* 使用组件树设计项目,配置文件连接各个组件-命名转换,动态组件;
* 父组件向内传递属性-动态属性;
* 子组件向外发布事件;
* slot插槽传递模版 - 具名slot;


## 高级用法

### 动画:使用transition 内置组件,有css过渡和js过渡两种方式。

#### css过渡实现原理:给动画的不一样阶段加上不一样的class名称。

* 四个阶段:v-enter/v-enter-active/v-leave/v-leave-active;使用:`<transition name="fade"></transition>` .fade-enter/.fade-enter-active/.fade-leave/.fade-leave-active;
* 可以接受动画的元素有:v-show/v-if/动态组件加载;
* 经过mode="out-in"/"in-out"实现动画顺序;
* 对于多元素模版,若是使用的是同标签名,须要使用key来进行区分;

#### js过渡实现原理:经过定义不一样的方法来实现动画。

不一样方法名:

`
<transition
v-on:before-enter="beforeEnter"
v-on:enter="enter"
v-on:after-enter="afterEnter"
v-on:enter-cancelled="enterCancelled"
v-on:before-leave="beforeLeave"
v-on:leave="leave"
v-on:after-leave="afterLeave"
v-on:leave-cancelled="leaveCancelled">
...
</transition>
`
### 自定义指令

* 方法:主要有两种:局部定义和全局定义。
* 使用:inserted和bind是指令的两个配置属性,属性值是一个函数,因此用es6语法。讲inserted函数,,而后而后回到组件,处理el表示使用了指令的元素对象,还有一个binding对象,其中binding.value表示的是使用了指令元素的指令的值,能够是json,而后借这个json(里面放着css相关信息)所包含的数据来修改dom的样式。


### 插件

* vue-resource: 发送http请求
* vue-router: 前端路由
* 引入步骤:
+ 入口js文件 import from 插件
+ Vue.use(插件) 不过在模块环境中应当始终显式调用 Vue.use() :


## 相关概念

* MVC
* MVP
* MVVM


## 相关知识点

* Node.js
* NPM
* Mustache
* ECMAscript
* Javascript
* Ajax


## Vue全家桶

* vue.js
* vue-cli
* vue-router
* vue-axios
* vue-lazyload


## 打包工具

* Webpack
* Gulp
* Parcel


## 安装依赖

* Css-loader
* Sass-loader
* Vue-style-loader
* Superagent

 

## 踩坑

* 在开发过程当中,若是修改了配置文件,须要从新启动,不然报错;
* 手写输入的拼写错误问题,通常会提示出来;
* 样式文件中的拼写错误,包括属性、值、图片名称,若是找不到也会报错,通常很难找到,因此出现报错的时候必定先要解决!!
* 使用webpack要进行loader依赖的安装;
* proxyTable 反向代理设置;
* 在组件中template节点下必须只有一个子节点;
* 若是采用webpack进行打包管理,若是数据中有须要在js里引用图片地址,须要使用`require()`的方式进行引用,不然不会被打包到静态文件目录里;
* 在组件使用时候先进行数据绑定;
* 在使用属性的时候必定记得要添加做用域,好比this;
* 在组件或者模版中使用sass或less文件,必定要在style标签上声明lang,不然报错没商量;
* 在组件开发过程当中,若是须要传参必定记得定义而且在引用的地方调用;

## 参考资料* [Vue官网](https://cn.vuejs.org/v2/guide/)

相关文章
相关标签/搜索