Vue.js教程

作者: WebGiser | 来源:发表于2018-05-07 16:58 被阅读2次

1、安装node.js和npm。
2、安装淘宝镜像:  npm install -g cnpm --registry = http://registry.npm.taobao.org
3、安装vue-cli脚手架构建工具:   cnpm install -g vue-cli
4、用vue-cli构建项目:  vue init webpack firstVue  (在项目目录下cmd,输入命令,firstVue为项目名称)
5、运行项目:   npm run dev

1、在项目中引入Vue.js
(1)下载Vue.js源码:在官网上点击“开发版本”或“生产版本”即可获取相应源码,复制到vue.js文件中,并在项目中引用即可。
(2)CDN方式:<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
(3)NPM方式:npm install vue

2、挂载点、模板、实例

<html>
    <head>
        <title>vue.js页面</title>
        <script type="text/javascript" src="./vue.js"></script>
    </head>
    <body>
        <div id="root"><span>我的名字是{{name}}</span></div>        

        <script type="text/javascript">
            new Vue({
                el:'#root',
                data:{
                    name:'hello world'
                }
            });
        </script>
    </body>
</html>

挂载点: vue实例的挂载点,vue实例只会处理挂载点内部的数据

<div id="root">   </div> 

模板:挂载点内部的dom元素称为模板,模板可以直接写在挂载点内部,也可以写在vue实例的template中。
(1)挂载点内部模板:

<span>我的名字是{{name}}</span>

(2)vue实例中模板:

new Vue({
                el:'#root',
                template:'<span>我的名字是{{name}}</span>',
                data:{
                    name:'hello world'
                }
            });

(3)实例:vue实例会自动填充模板中的数据。

new Vue({
                el:'#root',
                data:{
                    name:'hello world'
                }
            });

3、数据、事件、方法
(1)插值表达式:
1、{{name}}
2、<span v-text = "name"></span> (name中的数据会转义,原封不动的输出)
3、<span v-html = "name"></span> (name中的数据不会转义,可能会输出html内容)
(2)事件: v-on:click = "事件名称"( v-on:click简写成 @click)

<div v-on:click="handleClick">点击我</div>

(3)方法:方法定义在vue实例的methods中。

new Vue({
                el:'#root',
                data:{
                    name:'hello world'
                },
                methods:{
                    handleClick:function(){
                        this.name = "abc";
                    }
                }
            });

4、dom属性绑定和双向数据绑定
(1)dom属性绑定: v-bind:属性名=“key值”。(v-bind:可以简写成:)

<div v-bind:title="title">title</div>

new Vue({
                el:'#root',
                data:{
                    name:'hello world',
                    title:'this is title'
                }
            });

(2)双向数据绑定: v-model = "key值"。(双向绑定)

<input v-model="address"/>
<div>{{address}}</div>

new Vue({
                el:'#root',
                data:{
                    name:'hello world',
                    title:'this is title',
                    address:'xian'
                }
            });

5、计算属性和侦听器
(1)计算属性:计算属性是由其他数据计算得到的。

姓:<input v-model="firstName"/>
名:<input v-model="lastName">
<div>{{fullName}}</div>

new Vue({
                el:'#root',
                data:{
                    name:'hello world',
                    title:'this is title',
                    address:'xian',
                    firstName:'',
                    lastName:''
                },
                methods:{
                    handleClick:function(){
                        this.name = "abc";
                    }
                },
                computed: {
                    fullName:function(){
                        return this.firstName +''+ this.lastName;
                    }
                }

(2)侦听器:侦听某一个数据的变化。

<div>{{count}}</div>

new Vue({
                el:'#root',
                data:{
                    name:'hello world',
                    title:'this is title',
                    address:'xian',
                    firstName:'',
                    lastName:'',
                    count:0
                },
                methods:{
                    handleClick:function(){
                        this.name = "abc";
                    }
                },
                computed: {
                    fullName:function(){
                        return this.firstName +''+ this.lastName;
                    }
                },
                watch:{
                    fullName:function(){
                        this.count++;
                    }
                }
            });

6、v-if、v-show、v-for指令
(1)v-if

<div v-if="show">hello world</div>
<button @click="showClick">toggle</button>

new Vue({
                el:'#root',
                data:{
                    show:true
                },
                methods:{
                    showClick:function(){
                        this.show = !this.show;
                    }
                }
            });

(2)v-show

<div v-show="show">hello world</div>
<button @click="showClick">toggle</button>

new Vue({
                el:'#root',
                data:{
                    show:true
                },
                methods:{
                    showClick:function(){
                        this.show = !this.show;
                    }
                }
            });

v-if是将该元素从dom中直接删除。v-show是为该元素添加了style="display: none;",只是隐藏而已,没有删除。
(3)v-for

<ul>
  <li v-for = "(item,index) of list" :key="index">元素:{{item}},下标:{{index}}</li>
</ul>

new Vue({
                el:'#root',
                data:{
                    list:[1,2,3]
                }
            });

7、组件
组件:页面的某一部分,每一个vue组件都是一个vue实例(都可以包含methods、computed等)。
(1)全局组件

            <ul>
                <todo-item></todo-item>
            </ul>

            //全局組件
            Vue.component('todo-item',{
                template:'<li>item</li>'
            });

(2)局部组件

            <ul>
                <todo-item></todo-item>
            </ul>

            //局部組件
            var TodoItem = {
                template:'<li>item</li>'
            }

            new Vue({
                el:'#root',
                components:{
                    'todo-item':TodoItem
                }
            });

todoList示例

<html>
    <head>
        <title>to do list页面</title>
        <script type="text/javascript" src="./vue.js"></script>
    </head>
    <body>
        <div id="root">
            <div>
                <input v-model="todoContent"/>
                <button @click="handleClick">提交</button>
            </div>
            <ul>
                <li v-for="(item,index) of list" :key="index">{{item}}</li>
            </ul>
        </div>

        <script type="text/javascript">
            new Vue({
                el:'#root',
                data:{
                    todoContent:'',
                    list:[]
                },
                methods:{
                    handleClick:function(){
                        this.list.push(this.todoContent);
                        this.todoContent = '';
                    }
                }
            });
        </script>
    </body>
</html>
image.png

todoList组件示例

<html>
    <head>
        <title>to do list页面</title>
        <script type="text/javascript" src="./vue.js"></script>
    </head>
    <body>
        <div id="root">
            <div>
                <input v-model="todoContent"/>
                <button @click="handleClick">提交</button>
            </div>
            <ul>
                <todo-item v-for="(item,index) of list" :key="index" :content="item"></todo-item>
            </ul>
        </div>

        <script type="text/javascript">
            //全局組件
            Vue.component('todo-item',{
                template:'<li>{{content}}</li>',
                props:['content']
            });

            //局部組件
            // var TodoItem = {
            //  template:'<li>item</li>'
            // }

            new Vue({
                el:'#root',
                // components:{
                //  'todo-item':TodoItem
                // },
                data:{
                    todoContent:'',
                    list:[]
                },
                methods:{
                    handleClick:function(){
                        this.list.push(this.todoContent);
                        this.todoContent = '';
                    }
                }
            });
        </script>
    </body>
</html>

8、父子组件交互和通信
父组件通过属性给子组件传值,子组件通过vm.$emit( event, […args] )向外发布触发事件和参数,父组件可以监听事件。

<html>
    <head>
        <title>to do list页面</title>
        <script type="text/javascript" src="./vue.js"></script>
    </head>
    <body>
        <div id="root">
            <div>
                <input v-model="todoContent"/>
                <button @click="handleClick">提交</button>
            </div>
            <ul>
                <todo-item v-for="(item,index) of list" :key="index" :content="item" :index = "index" @delete="handleDelete"></todo-item>
            </ul>
        </div>

        <script type="text/javascript">
            //全局組件
            Vue.component('todo-item',{
                 //props:子组件接收父组件传过来的值。
                props:['content','index'],
                template:'<li @click="handleClick">{{content}}</li>',
                methods:{
                    handleClick:function(){
                         //子组件发布触发事件delete和参数index。
                        this.$emit('delete',this.index);
                    }
                }
            });

            //局部組件
            // var TodoItem = {
            //  template:'<li>item</li>'
            // }

            new Vue({
                el:'#root',
                // components:{
                //  'todo-item':TodoItem
                // },
                data:{
                    todoContent:'',
                    list:[]
                },
                methods:{
                    handleClick:function(){
                        this.list.push(this.todoContent);
                        this.todoContent = '';
                    },
                    //父组件监听delete事件和参数,并做相应处理。
                    handleDelete:function(index){
                        this.list.splice(index,1);
                    }
                }
            });
        </script>
    </body>
</html>

9、vue-cli使用
// 全局安装 vue-cli
$ npm install --global vue-cli

//创建一个基于 webpack 模板的新项目
$ vue init webpack my-project

//安装依赖
$ cd my-project
$ npm run dev

相关文章

网友评论

    本文标题:Vue.js教程

    本文链接:https://www.haomeiwen.com/subject/bqsvrftx.html