首页 > 代码库 > Vue入门2

Vue入门2

欢迎转载,转载请注明出处。

 

前言

  学习本系列Vue知识,需要结合本系列的一些demo。你可以查看我的 Github 或者直接下载 ZIP包 

  建议学习本系列之前已经会一个其他的前端框架,了解计算属性,数据绑定,模板语言等。零基础的话,看本教程可能不太适合。

  上一篇文章已经讲了前六个demo。

 

七、Vue实例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>vue-demos</title>
        <script src="../vue.js"></script>
    </head>
    <body>
        <!-- 
            Vue实例
        -->
        <div id="app">
            <p>{{ message }}</p>
            <button v-on:click="sayHello">sayHello</button>
        </div>
        <script>
            //每个 Vue应用都是通过构造函数 Vue 创建一个 Vue的根实例 启动的 var app = new Vue({});
            //在实例化 Vue 时,需要传入一个选项对象,它可以包含数据data、模板template、挂载元素el、方法methods、生命周期钩子等选项
            var app = new Vue({
                el: #app,
                data: {                     //每个 Vue 实例都会代理其 data 对象里所有的属性
                    message: Hello Vue    //app.message = app.data.message
                },
                methods: {
                    sayHello: function(){
                        alert(hello);
                    }
                },
                created: function(){       //实例生命周期的不同阶段,如created、 mounted、 updated 、destroyed 。钩子的 this 指向调用它的 Vue 实例。一些用户可能会问 Vue.js 是否有“控制器”的概念?答案是,没有。组件的自定义逻辑可以分布在这些钩子中。
                    // this 指向 vm 实例
                    console.log(this.message + 实例被创建);
                }
            });
        </script>
    </body>
</html>

技术分享

 

八、注册全局组件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>vue-demos</title>
        <script src="../vue.js"></script>
    </head>
    <body>
        <!-- 
            全局组件
            在Vue里,一个组件实质上是一个拥有预定义选项的一个Vue实例。
            要注册一个全局组件,你可以使用 Vue.component(tagName, options)
        -->
        <div id="app">
            <!-- 引用组件 -->
            <my-component></my-component>
        </div>
        <script>
            // 注册组件。要确保在初始化根实例之前注册了组件
            Vue.component(my-component, {
                template: <div>A custom component!</div>
            });
            // 创建根实例
            var app = new Vue({
                el: #app
            });
        </script>
    </body>
</html>

技术分享

 

九、注册局部组件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>vue-demos</title>
        <script src="../vue.js"></script>
    </head>
    <body>
        <!-- 
            局部注册组件
            不必在全局注册每个组件。通过使用组件实例选项注册,可以使组件仅在另一个实例/组件的作用域中可用
        -->
        <div id="app">
            <!-- 引用组件 -->
            <my-component></my-component>
        </div>
        <script>
            // 注册局部组件
            var Child = {
                template: <div>A child component!</div>
            }
            // 创建根实例.并调用局部组件
            var app = new Vue({
                el: #app,
                components: {
                    my-component: Child
                }
            });
        </script>
    </body>
</html>

技术分享

 

十、props传递数据

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>vue-demos</title>
        <script src="../vue.js"></script>
    </head>
    <body>
        <!-- 
            父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息
            prop 是单向绑定的:当父组件的属性变化时,将传导给子组件。
            父组件使用 props 把数据传给子组件,子组件需要显式地用 props 选项 声明 “prop”:
        -->
        <div id="app">
            <!-- 引用组件 -->
            <child message="hello!"></child>
        </div>
        <script>
            Vue.component(child, {
                // 声明父组件的属性,props。然后在本子组件中就可以使用这个属性。
                props: [message],
                template: <span>{{ message }}</span>
            })
            
            var app = new Vue({
                el: #app
            });
        </script>
    </body>
</html>

技术分享

 

十一、自定义事件events

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>vue-demos</title>
        <script src="../vue.js"></script>
    </head>
    <body>
        <!-- 
            父组件使用 props 把数据传给子组件,但如果子组件要把数据传递回去,那就是自定义事件!
            自定义事件也是使用v-on绑定。
            使用 $on(eventName) 监听事件
            使用 $emit(eventName) 触发事件
            
            本例在app实例里定义了事件changeMsg().在子组件中去触发这个事件。从而实现子组件的数据传递到父组件
        -->
        
        <div id="app">
            <p>Message: {{message}}</p>
            <child></child>
        </div>
        
        <template id="temp">
            <div>
                <input v-model="msg" placeholder="please input your message!" />
                <button @click="test(msg)">change message</button>
            </div>
        </template>
        
        <script>
            Vue.component(child, {
                //指定模板为id为"temp"标签
                template: "#temp",
                //定义模板中初始化的值,data应该是一个函数
                data: function() {
                    return {
                        msg: "hello",
                    }
                },
                methods: {
                    //当点击按钮时会触发的事件(这个事件中会调用自定义的事件)
                    test: function(msg){
                        console.log(be click + msg);
                        app.$emit(changeMsg, msg);
                    }
                }

            })
            
            var app = new Vue({
                el: #app,
                //初始化messages数组
                data: {
                    message: hello,
                }
            });
            
            //自定义事件
            app.$on(changeMsg, function (msg) {
                console.log(我是自定义事件)
                app.message = msg;
            })
        </script>
    </body>
</html>

技术分享

 

Vue入门2