vue组件传值和脚手架下载

1. 局部组件:  三步:声子、挂子、用子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
    <div id="app">
        <!-- 用子 -->
        <App></App>

    </div>
</body>
<script src="../vue.js"></script>
<script>
    // 声子
    let App = {
        data(){
            return {
                appmsg:'我是app组件',
            }
        },
        template:`
            <div class="app">
                <h1>{{appmsg}}</h1>
            </div>
        `,
    }

    let vm = new Vue({
        el:'#app',
        data(){
            return {
                // appmsg:'xxxx'
            }
        },
        components:{
            // App:App, // 挂子
            App,
        }
    })

</script>
</html>

2. 全局组件:  声子、用子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
    <div id="app">
        <!-- 用子 -->
        <App></App>
        <num></num>
    </div>
</body>
<script src="../vue.js"></script>
<script>
    // 声子  全局组件
    Vue.component('num',{
        data(){
            return {
                nummsg:'我是全局num组件',
                num:100,
            }
        },
        template:`
            <div class="app">
                <h1>{{nummsg}}</h1>
                <h1>{{num}}</h1>
            </div>
        `,

    })

    // 声子  局部组件
    let App = {
        data(){
            return {
                appmsg:'我是app组件',
            }
        },
        template:`
            <div class="app">
                <h1>{{appmsg}}</h1>
            </div>
        `,
    }

    let vm = new Vue({
        el:'#app',
        data(){
            return {
                // appmsg:'xxxx'
            }
        },
        components:{
            // App:App, // 挂子
            App,
        }
    })

</script>
</html>

3. 组件传值

3.1 父组件往子组件传值

两步:1 在父组件使用子组件的标签上加自定义属性

2 在子组件中声明props属性来接受数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
    <div id="app">
        <!-- 用子 -->
        <App></App>
    </div>
</body>
<script src="../vue.js"></script>
<script>

    // header footer section  main...不要和h5中的新标签名冲突
    let Vheader = {
        data(){
            return {
                msg:'我是vheader组件',
            }
        },
        template:`
            <div class="vheader">
                <button>{{msg}}</button>
                <h2>{{xx}}</h2>
            </div>
        `,
        props:['xx', ]
    }


    //<Vheader xx="30"></Vheader> 静态传值
    //<Vheader :xx="num"></Vheader> 动态传值
    // 声子
    let App = {
        data(){
            return {
                appmsg:'我是app组件',
                num:20,
            }
        },
        components:{
            Vheader,
        },
        template:`
            <div>

                <Vheader :xx="num"></Vheader>

            </div>
        `
    }

    let vm = new Vue({
        el:'#app',  //
        data(){
            return {
                // appmsg:'xxxx'
            }
        },
        components:{
            // App:App, // 挂子
            App,
        }
    })

</script>
</html>

3.2 子组件往父组件传值

两步

1 子组件中使用this.$emit('父组件的自定义事件名称',值),

2 父组件中定义一个父组件的自定义事件名称对应的那个方法来接受数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
    <div id="app">
        <!-- 用子 -->
        <App></App>


    </div>
</body>
<script src="../vue.js"></script>
<script>

    // header footer section  main...不要和h5中的新标签名冲突
    let Vheader = {
        data(){
            return {
                msg:'我是vheader组件',
                count:180,
            }
        },
        template:`
            <div class="vheader">
                <button>{{msg}}</button>
                <button @click="zouni">走你</button>
            </div>
        `,
        methods: {
            zouni(){
                this.$emit('fatherxx',this.count);
            }
        }
        // created(){
        //
        // }

    }

    // 声子
    let App = {
        data(){
            return {
                appmsg:'我是app组件',
                num:20,
                soncount:'',
            }
        },
        components:{
            Vheader,
        },
        template:`
            <div>
                <p style="color:red;">{{soncount}}</p>
                <Vheader @fatherxx="xx"></Vheader>

            </div>

        `,
        methods:{
            xx(val){
                this.soncount = val;
            }
        }

    }

    let vm = new Vue({
        el:'#app',  //
        data(){
            return {
                // appmsg:'xxxx'
            }
        },
        components:{
            // App:App, // 挂子
            App,
        }
    })

</script>
</html>

3.3 平行组件传值

三步

1 声明一个公交车

2 往公交车上放数据

3 从公交车上拿数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
    <div id="app">
        <!-- 用子 -->
        <App></App>


    </div>
</body>
<script src="../vue.js"></script>
<script>

    let bus = new Vue();

    //
    Vue.component('v1',{
        data(){
            return {
                nummsg:'我是v1组件',
                num:100,
            }
        },
        template:`
            <div class="app">
                <h1>{{nummsg}}</h1>
                <h1>{{num}}</h1>
                <button @click="zouni">走你!</button>
            </div>
        `,
        methods:{
            zouni(){
                bus.$emit('v1xx',this.num);
            }
        }

    });
    Vue.component('v2',{
        data(){
            return {
                nummsg:'我是v2组件',
                num:120,
                v1num:'',
            }
        },
        template:`
            <div class="app">
                <h1>{{nummsg}}</h1>
                <h1>{{num}}</h1>
                <p style="color:blue;">{{v1num}}</p>
            </div>
        `,
        created(){ 
            bus.$on('v1xx', (val) => {
                // console.log(val);
                // console.log(this);
                this.v1num = val;
            })
        }
    })

    // 声子
    let App = {
        data(){
            return {
                appmsg:'我是app组件',
                num:20,
                soncount:'',
            }
        },

        template:`
            <div>
                <v1></v1>
                <v2></v2>
            </div>
        `,
    }

    let vm = new Vue({
        el:'#app',  //
        data(){
            return {
                // appmsg:'xxxx'
            }
        },
        components:{
            // App:App, // 挂子
            App,
        }
    })

</script>
</html>

4. vue- router

通过不同的访问路径,加载不同的组件到单页面中(那一个html文件),vue做的叫做单页面应用(SPA).

文档:https://router.vuejs.org/zh/

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
<div id="app">
    <App></App>
</div>
</body>

<script src="../vue.js"></script>
<script src="vue-router.js"></script>

<script>

    // 第一步:
    Vue.use(VueRouter);  // 将VueRouter功能注入到Vue中

    // 第二步:写组件
    let home = {
        data(){
            return {
                msg:'我是home页面',
            }
        },
        template:`
            <div class="home">
                <h1>{{msg}}</h1>

            </div>
        `,

    }
    let spa = {
        data(){
            return {
                msg:'我是spa页面',
            }
        },
        template:`
            <div class="spa">
                <h1>{{msg}}</h1>

            </div>
        `
    }
    // 127.0.0.1:8000/home/
    // 127.0.0.1:8000/spa/

        // 声子
    let App = {
        data(){
            return {
                appmsg:'我是app组件',
                num:20,
                soncount:'',
            }
        },
        // a href='/home/'
        // 第六步:写连接,写出口
        template:`
            <div>
                <router-link to="/home/">首页</router-link>
                <router-link to="/spa/">spa页</router-link>

                <router-view></router-view>

            </div>
        `,
    }
    // 第三步:写路由规则
    const routes = [
        {path:'/home/', component:home, },
        {path:'/spa/', component:spa, },
    ]
    // 第四步:实例化vue-router对象
    let router = new VueRouter({
        routes,
    })

    // 第五步:挂载router对象
    let vm = new Vue({
        el:'#app',  //
        router,  //  挂载到vue对象上
        data(){
            return {
                // appmsg:'xxxx'
            }
        },
        components:{
            // App:App, // 挂子
            App,
        }
    })

</script>

</html>

5. vue-cli 脚手架

先下载node.js

下载地址:https://nodejs.org/en/download/【如果已经安装了nvm,那么这里不用手动安装了】

node -v
npm -v

安装vue- cli

npm install -g vue-cli --registry=https://registry.npm.taobao.org

创建项目

vue init webpack 项目名称

按照提示,运行项目

npm run dev
原文地址:https://www.cnblogs.com/fdsimin/p/13576957.html