Vue.js 2.0 学习重点记录

 

Vue.js兼容性

Vue.js.js 不帮助 IE8 及其以下版本,因为 Vue.js.js 使用了 IE8 不可以模拟的 ECMAScript 5 特性。 Vue.js.js 襄助所有兼容 ECMAScript 5 的浏览器。

Vue.js安装

设置模式有二种:

1、直接下载用script标签引入(推荐引入开发版本,压缩版本会失去错误提醒和警戒)

2、使用cdn方法引入

3、npm安装

   npm安装的前提需要设置了nodejs,那里推荐nvm安装nodejs

   附上一小段nvm使用的指令:

 

   

$ nvm install v6.10.2

   $ nvm list 

    * 6.10.2 (Currently using 64-bit executable)

   $ nvm use 6.10.2

   Now using node v6.10.2 (64-bit)

   $ node -v

   v6.10.2

   $ npm -v

   3.10.10



   $ npm install Vue.js

   或者:

   $ cnpm install bower

   $ bower install Vue.js

 

   注意:可以使用天猫定制的 cnpm (gzip
压缩援助) 命令行工具代替默认的 npm:

$ npm install -g cnpm --registry=https://registry.npm.taobao.org

这般就能够运用 cnpm
命令来安装Vue.js等模块了:

$ cnpm install vue

Vue.js脚手架安装

# 全局安装 Vue.js-cli

$ npm install --global Vue.js-cli

# 创建一个基于 webpack 模板的新项目

$ Vue.js init webpack my-project

# 切换到项目目录,安装依赖

# 下面出现的所有提示 直接回车则选择默认选项或者yes

$ cd my-project

$ npm install

# 运行该项目

$ npm run dev

DONE  Compiled successfully in 4388ms

> Listening at http://localhost:8080

* 这里默认8080端口,如果想要更改指定端口,找到根目录下config文件夹---index.js

dev: {  

  env: require('./dev.env'),  

  port: 8080,  

  autoOpenBrowser: true,  

  assetsSubDirectory: 'static',  

  assetsPublicPath: '/',  

  proxyTable: {},  

  cssSourceMap: false  

}  

  port可以改成大家指定的端口,这里不光可以转移端口,还足以遵照需要改变其他安排信息。

 

 

 

建好Vue.js项目然后,想要再一次localhost:8080下运行起来,在cmd命令框,进入项目根目录文件夹路径下,然后

npm run dev,则他会运行dev-sever.js文件,之后运行成功,页面自动打开。

 

Vue.js起步

 

var app1=new Vue.js({

            el:”#app1″,

            data:{

                message:”hahahha”+new Date()

            }

        });

 

Vue.js 实例化代码可以一贯写new Vue.js,也足以赋个值,当实例化的Vue.js赋值给一个变量之后,在控制台可以平素通过改app1.message等代码,在浏览器可以直接看看页面效果。

 

 

<div id=”app3″>

        <ol>

            <li v-for=”todo in todos”>{{todo.text}}</li>

        </ol>

</div>

var app3 = new Vue.js({

           el:”#app3″,

           data:{

                todos:[

                    {text:”aaa”},

                    {text:”bbb”},

                    {text:”ccc”},

                    {text:”ddd”}

                ]

           }

        });

 

 图片 1

  **此间注意:循环的列表项是加载列表标签li标签上的,不是列表盒子上,在支配台输入

  app3.todos.push({text:”eee”});  //5

  app3.todos.push({text:”fff”}); //6

  页面中会直接呈现push进来的列表项,控制台打印出数组的长短

 

var app4 = new Vue.js({

           el:”#app4″,

           data:{

               message:”我要逆袭了”

           },

            methods:{

                reverseMsg:function () {

                    this.message=this.message.split(“”).reverse().join(“”);

                }

            }

        });

 

**此处注意:methods方法要加s,否则报错:

  图片 2

父组件向子组件传递数据,使子组件接受一个性能:

<div id=”app6″>

        <ol>

            <hello v-for=”item in fruits”
:todo=”item”></hello>

        </ol>

</div>

//定义新零件

        Vue.js.component(‘hello,{

            props:[‘todo’],

            template:”<div>{{todo.text}}</div>”

        });

        var app6 = new Vue.js({

            el:”#app6″,

            data:{

                fruits:[

                    {text:”apple”},

                    {text:”apple2″},

                    {text:”apple3″},

                    {text:”apple4″}

                ]

            }

        })

 

**关键点:使用 v-bind 指令将属性传到每一个再一次的零部件中,缤纷切让它相当于遍历出来的元素。

Vue.js脚手架使用

webstorm eslint配置:推荐一篇著作:http://blog.csdn.net/whitehack/article/details/52422873

 

src目录是我们要开销的目录:

assets: 放置一些图片,如logo等。

components: 目录里面放了一个零件文件,可以不用。

App.vue.js: 项目进口文件,我们也得以一贯将组建写这里,而不拔取components 目录。

main.js: 项目标中坚文件。

 

**选拔要点:在App.Vue.js中导入components组件文件夹下写好的零件,在模板里应用组件,导出默认,导出的名字为模板最外层元素的id或者class名称,components写组件名称;单独的组件写好后也要记得导出默认,导出的名字为模板最外层元素的id或者class名称。[那么些都依据了ES6语法格式]

<script>

// 导入组件

import Hello from ‘./components/Hello’

 

export default {

  name: ‘app’,

  components: {

    Hello

  }

}

</script>

 

**在本人第一遍选择时eslint报错:

 图片 3

错误1:导入的地址必须利用单引号

荒谬2:在从导出时components属性冒号之后要加空格,再写大括号

不当3:components属性下写组件名称,应该缩进4个空格

谬误4:在Apple.vue中多写了个s[个人不细心,此类错误尽量制止]

 

当这一个错误都修改完成将来,页面正常显示出来了:[eslint检查比较严苛,假使想要关闭可以自行百度]

 图片 4

Vue.js具体运用

Vue.js 条件

 

v-if、v-else-if、v-else

基准语句的功能:通过判断不同的准绳,彰显不同的区块,类似php条件语句的用法,同样可以嵌套v-else-if(2.1.0新增)。

v-show

操纵展现隐藏,不辅助<template>语法,也不帮忙 v-else。

Vue.js循环

用法类似for in循环,所以指令为v-for,(这里切记循环列表项写在循环的单个项目元素上),援助template模版使用。

用法二种:

item in items

(value, key) in object

(value, key, index) in object

这边有一个例外的用法:

可以迭代整数:

<div id="app">

  <ul>

    <li v-for="n in 10">

     {{ n }}

    </li>

  </ul>

</div>

<script>

new Vue({

  el: '#app'

})

</script>

输出:

图片 5 

设若急需非常频繁地切换,则应用
v-show 较好;假设在运转时规格不太可能改变,则采用v-if 较好。当 v-if 与 v-for 一起利用时,v-for 具有比 v-if 更高的先行级。

Vue.js 总结属性(相比较angular和react的优点之一)

computed vs methods

我们可以运用 methods 来代替 computed,效果上四个都是千篇一律的,不过 computed 是按照它的依赖缓存,唯有相关依赖爆发转移时才会另行取值。而采用methods ,在再一次渲染的时候,函数总会重新调用执行。

可以说采纳 computed 性能会更好,可是假诺你不希望缓存,你能够采纳methods 属性。

computed 默认有getter方法,能够友善定义一个setter方法

Vue.js 样式绑定

v-bind: 能够绑定如下两种:

目的语法

数组语法

Vue.js class绑定:v-bind:class=”{ }”

Vue.js style(内联样式): v-bind:style=”{ }”

 

示例:

<div id="app12">

        <div v-bind:class="[isActive?active:'',errorClass]">我绑定了不同的class</div>

        <div v-bind:class="{active:isActive,errorClass:hasError}">我绑定了不同的class</div>

        <div v-bind:class="classObject">我绑定了不同的class</div>

        <div v-bind:class="{active:isActive}">我绑定了不同的class</div>

</div>

var app12 = new Vue({

            el:"#app12",

            data:{

                active:"active",

                errorClass:"errorClass",

                isActive:true,

                classObject: {

                    'active': true,

                    'errorClass': true

                },

                hasError:true

            }

        });

图片 6

**注意:

以上从上到下依次为:

u 数组绑定class,数组绑定的class,数组元素是目的的称号,在vue data里要写对象的值即真正的class名才可以

u 多少个对象属性绑定class,

u 直接绑定一个目的绑定class,在vue data里写对象属性名的时候,可加引号可不加,然而有中划线的时候必须加。

u 单个对象属性绑定class,遵照vue中isActive的图景改变

 

Vue.js表单控件绑定

v-model 会按照控件类型自动选用正确的艺术来更新元素。

绑定 value

对此单选按钮,勾选框及挑选列表选项,
v-model 绑定的 value 经常是静态字符串(对于勾选框是逻辑值):

<!-- 当选中时,`picked` 为字符串 "a" ,单选按钮-->

<input type="radio" v-model="picked" value="a">

<!-- `toggle` 为 true 或 false ,多选框-->

<input type="checkbox" v-model="toggle">

<!-- 当选中时,`selected` 为字符串 "abc",select选择框 -->

<select v-model="selected">

  <option value="abc">ABC</option>

</select>

不过有时我们想绑定 value 到 Vue 实例的一个动态属性上,这时可以用 v-bind 实现,并且这些特性的值可以不是字符串。

复选框假设是一个则为逻辑值,假设是几个则绑定到同一个数组。

Vue.js组件

以下实例大校 v-bind 指令将 todo 传到每一个再次的机件中:

Prop 实例

<div id="app">

    <ol>

    <todo-item v-for="item in sites" v-bind:todo="item"></todo-item>

      </ol>

</div> 

<script>

Vue.component('todo-item', {

  props: ['todo'],

  template: '<li>{{ todo.text }}</li>'

})

new Vue({

  el: '#app',

  data: {

    sites: [

      { text: 'Runoob' },

      { text: 'Google' },

      { text: 'Taobao' }

    ]

  }

})

</script>

注意: prop 是单向绑定的:当父组件的习性变化时,将传输给子组件,不过不会反过来。

**此处绑定todo属性是因为父组件不可以一贯把多少传到自定义的子组件上,需要绑定一个属性作为桥梁。

 

报错新闻

Vue.js2.0 不支持

$index

报错:

Vue.js.js:569 [Vue.js warn]: Property or method “$index” is not
defined on the instance but referenced during render. Make sure to
declare reactive data properties in the data option.

(found in <Root>)