zoukankan      html  css  js  c++  java
  • Vue.js相关知识2-组件

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
    .v-link-active {
    color: red;
    }
    </style>
    </head>
    <body>

    <h3>#使用props传递数据</h3>
    <div id="dr01">
    <div>组件实例的作用域是孤立的。这意味着不能并且不应该在子组件的模板内直接引用父组件的数据。可以使用 props 把数据传给子组件。</div>
    <br />
    <child msg="hello, vue.js!"></child>
    </div>

    <hr />

    <h3>#camelCase vs. kebab-case</h3>
    <div id="dr02">
    <div>HTML 特性不区分大小写。名字形式为 camelCase 的 prop 用作特性时,需要转为 kebab-case(短横线隔开)</div>
    <br />
    <!-- kebab-case in html -->
    <child02 my-message02="Hello, this is kebab-case message!"></child02>
    </div>

    <hr />

    <h3>#动态Props</h3>
    <div id="dr03">
    <div>
    <input v-model="parentMsg" placeholder="please input parentMsg" />
    </div>
    <br />
    <!-- v-bind绑定数据parentMsg到组件中 -->
    <child03 v-bind:my-message03="parentMsg"></child03>
    <!-- 缩写v-bind-->
    <child03 :my-message03="parentMsg"></child03>
    </div>


    <hr />

    <h3>#字面量语法 VS 动态语法</h3>
    <div id="dr04">
    <!-- 这里传递是字符串 -->
    <child04 my-message04="123+456"></child04>
    <!-- 这里用了动态语法,传递的值会通过js的表达式计算,传递的是数字 -->
    <child04 :my-message04="123+456"></child04>
    </div>

    <hr />

    <h3>#Prop类型绑定(单向、双向)</h3>
    <div id="dr05">
    <div>
    <div>vue实例:</div>
    <input v-model="name" />
    </div>
    <br />
    <div>
    <div>component组件(默认):</div>
    <child05 :my-message05="name"></child05>
    <div>component组件(once):</div>
    <child05 :my-message05.once="name"></child05>
    <div>component组件(sync):</div>
    <child05 :my-message05.sync="name"></child05>
    </div>
    </div>

    <h3>#Prop验证</h3>
    <div id="dr06">
    <div>
    <span>vue实例</span>
    <div>
    name:{{dr.name}}, age:{{dr.age}}.
    </div>
    <div>
    <input v-model="telphone" />
    </div>
    </div>
    <br />
    <div>
    <span>vue自定义组件</span>
    <child06 :msg_null="123+456" msg_string="this is string" :msg_number="99" :msg_twoway.sync="telphone" :msg_validate="mobilephone" :msg_number2String="mobilephone" :msg_obj2json="dr" :msg_json2obj="drJson"></child06>
    </div>
    </div>


    <script src="vue.js"></script>
    <script src="vue-resource.min.js"></script>
    <script src="vue-router.js"></script>
    <script src="demo_2.js"></script>
    </body>
    </html>

    js:
    //********************************************************************
    //使用props传递数据
    //注册组件"child"
    Vue.component("child", {
    //声明props属性
    props: ['msg'],
    //props可以用在模板内
    //可以用"this.msg"设置
    template: '<div>msg: {{msg}}</div>'
    });
    var dr01 = new Vue({
    el: "#dr01",
    });
    //********************************************************************
    //camelCase vs. kebab-case
    //注册组件child02
    Vue.component("child02", {
    //js中用驼峰命名法
    props: ["myMessage02"],
    template: "<div>myMessage02: {{myMessage02}}</div>"
    });
    var dr02 = new Vue({
    el: "#dr02",
    });
    //********************************************************************
    //动态Props
    //注册组件myMessage03
    Vue.component("child03", {
    props: ['myMessage03'],
    template: "<div>myMessage03: {{myMessage03}}</div>"
    });
    var dr03 = new Vue({
    el: "#dr03",
    data: {
    parentMsg: "Hello, this is parentMsg!",
    }
    });
    //********************************************************************
    //字面量语法 VS 动态语法
    Vue.component("child04", {
    props: ["myMessage04"],
    template: "<div>myMessage04: {{myMessage04}}</div>",
    });
    var dr04 = new Vue({
    el: "#dr04",
    });
    //********************************************************************
    //Prop类型绑定
    Vue.component("child05", {
    props: ["myMessage05"],
    template: '<input type="text" v-model="myMessage05" />'
    });
    var dr05 = new Vue({
    el: "#dr05",
    data: {
    name: "DarkRanger",
    }
    });



    //********************************************************************
    //Prop验证
    Vue.component("child06", {
    props: {
    //基础类型检测("null"意思是任何类型都可以)
    msg_null: null,
    //String类型,必须是定义过的,可以是空字符串""
    msg_string: {
    type: String,
    required: true,
    },
    //Number类型,默认值100
    msg_number: {
    type: Number,
    default: 100,
    },
    //Object类型,返回值必须是js对象
    msg_obj: {
    type: Object,
    default: function() {
    return {
    name: "DarkRanger",
    age: "18",
    }
    }
    },
    //指定这个prop为双向绑定
    //如果绑定类型不对将抛出一条警告
    msg_twoway: {
    type: String,
    twoWay: true,
    },
    //自定义验证,必须是Number类型,验证规则:大于0
    msg_validate: {
    type: Number,
    validator: function(val) {
    return val > 0;
    }
    },
    //将值转为String类型
    //在设置值之前转换值(1.0.12+)
    msg_number2string: {
    coerce: function(val) {
    return val + ""
    }
    },
    //js对象转JSON字符串
    msg_obj2json: {
    coerce: function(obj) {
    return JSON.stringify(obj);
    }
    },
    //JSONjs对象
    msg_json2obj: {
    coerce: function(val) {
    return JSON.parse(val);
    }
    },
    },
    template: '<div>msg_null: {{msg_null}}</div><div>msg_string:{{msg_string}}</div><div>msg_number: {{msg_number}}</div><div>msg_obj:{{"name-->"+msg_obj.name+", age-->"+msg_obj.age}}</div><div>msg_twoway:<input v-model="msg_twoway"></div><div>msg_validate:{{msg_validate}}</div><div>msg_number2String: {{msg_number2string}}</div><div>msg_obj2json: {{msg_obj2json}}</div><div>msg_json2obj:{{"name: "+msg_json2obj.name+"; age: "+msg_json2obj.age}}</div>'
    });




    var dr06 = new Vue({
    el: "#dr06",
    data: {
    telphone: "0356-1234567",
    mobilephone: 15912345678,
    dr: {
    name: "DarkRanger",
    age: 25
    },
    drJson: '{"name":"DarkRanger","age":25}',
    }
    })
     
  • 相关阅读:
    Closing File Descriptors
    Redirecting stdout using exec
    Debugging on part(s) of the script
    Android深入浅出之Audio 第一部分 AudioTrack分析
    svn在linux下的使用(svn命令)[转]
    Android深入浅出之Binder机制
    bash中获取文件路径和文件命的函数
    Android深入浅出之Audio 第一部分 AudioTrack分析
    Shell的脚本编程
    Android深入浅出之Surface
  • 原文地址:https://www.cnblogs.com/qhhw/p/5945865.html
Copyright © 2011-2022 走看看