1. 程式人生 > >Vue的Props屬性概述

Vue的Props屬性概述

使用 Props 傳遞資料

元件例項的作用域是孤立的。這意味著不能並且不應該在子元件的模板內直接引用父元件的資料。可以使用 props 把資料傳給子元件。

“prop” 是元件資料的一個欄位,期望從父元件傳下來。子元件需要顯式地用 props 選項 宣告 props:

    Vue.component('child', {
      // 宣告 props
      props: ['msg'],
      // prop 可以用在模板內
      // 可以用 `this.msg` 設定
      template: '<span>{{ msg }}</span>'
})

然後向它傳入一個普通字串:

    <child msg="hello!"></child>

舉例

錯誤寫法:
<!DOCTYPE html>
    <html lang="en">

    <head>
        <script type="text/javascript" src="./vue.js"></script>
        <meta charset="UTF-8">
        <title>vue.js</title>
</head> <body> <pre> 使用 props 傳輸資料予子元件 props , data 重複名稱會出現錯誤 </pre> <div id="app1"> <child mssage="hello!"></child> </div> <script> Vue.config.debug = true; Vue.component('child'
, { // declare the props props: ['msg','nihao','nisha'], // the prop can be used inside templates, and will also // be set as `this.msg` template: '<span>{{ msg }}{{nihao}}{{nisha}}</span>', data: function() { return { mssage: 'boy' } } }); var vm = new Vue({ el: '#app1' })
</script> </body> </html>
正確寫法:
<!DOCTYPE html>
    <html lang="en">

    <head>
        <script type="text/javascript" src="./vue.js"></script>
        <meta charset="UTF-8">
        <title>vue.js</title>
    </head>

    <body>
    <pre>
           使用 props 傳輸資料予子元件
           props , data 重複名稱會出現錯誤


    </pre>
    <div id="app1">
        <child mssage="hello!"></child>
    </div>
    <script>
        Vue.config.debug = true;
        Vue.component('child', {
            // declare the props
            props: ['msg','nihao','nisha'],
            // the prop can be used inside templates, and will also
            // be set as `this.msg`
            template: '<span>{{ msg }}{{nihao}}{{nisha}}</span>'
        });
        var vm = new Vue({
            el: '#app1'
        })
    </script>
    </body>

這裡寫程式碼片

    </html>

props 傳入多個數據(順序問題)

第一種

HTML

        <div id="app1">
                <child msg="hello!"></child>
                <child nihao="hello1!"></child>
                <child nisha="hello2!"></child>
        </div>

JS

        Vue.config.debug = true;
        Vue.component('child', {
            // declare the props
            props: ['msg','nihao','nisha'],
            // the prop can be used inside templates, and will also
            // be set as `this.msg`
            template: '<span>{{ msg }}{{nihao}}{{nisha}}</span>',
            /*data: function() {
                return {
                    msg: 'boy'
                }
            }*/
        });
        var vm = new Vue({
            el: '#app1'
        })

結果:hello! hello1! hello2!

第二種

HTML

    <div id="app1">
        <child msg="hello!"></child>
        <child nihao="hello1!"></child>
        <child nisha="hello2!"></child>
    </div>

JS

    Vue.config.debug = true;
    Vue.component('child', {
        // declare the props
        props: ['msg','nihao','nisha'],
        // the prop can be used inside templates, and will also
        // be set as `this.msg`
        template: '<span>123{{ msg }}{{nihao}}{{nisha}}</span>',
        /*data: function() {
            return {
                msg: 'boy'
            }
        }*/
    });
    var vm = new Vue({
        el: '#app1'
    })

結果:123hello! 123hello1! 123hello2!

第三種

HTML

        <div id="app1">
            <child msg="hello!"></child>
            <child nihao="hello1!"></child>
            <child nisha="hello2!"></child>
        </div>

JS

        Vue.config.debug = true;
        Vue.component('child', {
            // declare the props
            props: ['msg','nihao','nisha'],
            // the prop can be used inside templates, and will also
            // be set as `this.msg`
            template: '<span>{{ msg }}{{nihao}}{{nisha}}123</span>',
            /*data: function() {
                return {
                    msg: 'boy'
                }
            }*/
        });
        var vm = new Vue({
            el: '#app1'
        })

結果:hello! 123 hello1! 123 hello2!123

第四種

HTML

        <div id="app1">
            <child msg="hello!"></child>
            <child nihao="hello1!"></child>
            <child nisha="hello2!"></child>
        </div>

JS

        Vue.config.debug = true;
        Vue.component('child', {
            // declare the props
            props: ['msg','nihao','nisha'],
            // the prop can be used inside templates, and will also
            // be set as `this.msg`
            template: '<span>{{ msg }}123{{nihao}}{{nisha}}123</span>',
            /*data: function() {
                return {
                    msg: 'boy'
                }
            }*/
        });
        var vm = new Vue({
            el: '#app1'
        })

結果:hello! 123 123hello1! 123hello2!

結論:
在props 中傳入多個數據是,如果在父元件的模板類新增其他元素或者字元會有:

1-在最前面加入—每個子元件渲染出來都會在其前面加上
2-在最後面加入—每個子元件渲染出來都會在其後面加上
3-在中間加入—他前面子元件後面加上,後面的子元件後面加上