Vue学习二

一、事件处理
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>event</title>
    <script src="../vue.js"></script>
</head>

<body>
    <div id="app">
        <div>
            {{title}}
        </div>
        <div @click ='title = "abc"'>
            <div>
                <!-- $event获取按钮点击 -->
                <!-- <button @click.stop = "handleClick('x',$event)">click</button> -->
                <!-- stop 冒泡 -->
                <button @click.stop = "title = 'world' ">click</button>
                <!-- prevent 阻止默认的点击 -->
                <a @click.prevent = 'handleClick'  href="http://www.baidu.com">test</a>
              
            
            </div>   
        </div>
            <!-- self -->
            <!-- @click事件放在最外层,点击上面的层也能触发 .self (就能只触发自己的) -->
        <div style="width :100px; height :100px; background:red">
            <div  @click = 'handleClick2'  style="width: 50px; height: 50px; background-color: green;">
                map
            </div>
            <div>
                <button v-on:click.alt = 'onClick'>A</button>
            </div>

        </div>
    </div>
    <script>
        var vm=new Vue({
           el:'#app',
           data:{
              title:'event'
            },
           methods:{
              handleClick(res,e){
                console.log(e)
              },
              handleClick2(){
                console.log(1111)
              },
              onclick(){
                  console.log(100)
              }
            },
        });
    </script>
</body>

</html>

二、表单绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="../vue.js"></script>
</head>

<body>
    <div id="app">
        <input type="text" name="" id="" v-model='textValue'>
        <textarea name="" id="" cols="30" rows="10" v-model = 'mulTextValue'></textarea>

        <div>
            <input type="checkbox" v-model='mulCheckboxValue' value ='a'>
            <input type="checkbox" v-model='mulCheckboxValue' value ='b'>
            <input type="checkbox" v-model='mulCheckboxValue' value ='c'>
             {{mulCheckboxValue}}
        </div>
        <div>
             <input type="radio" v-model='radioValue' value="a">
             <input type="radio" v-model='radioValue' value="b">
             <input type="radio" v-model='radioValue' value="c">
             {{radioValue}}
        </div>

        <div>
            <!-- 加value的操作 -->
            <!-- <select v-model = 'selectValue'>
                <option value="1">北京</option>
                <option value="2">上海</option>
                <option value="3">深圳</option>
            </select> -->
            <!-- {{selectVale}} -->
            <!-- 不加value的操作 -->
            <!-- <select v-model = 'selectValue'>
                <option>北京</option>
                <option>上海</option>
                <option>深圳</option>
            </select>
            {{selectVale}} -->
            <!-- 多选的 -->
            <select multiple v-model = 'selectArr'>
                <option>北京</option>
                <option>上海</option>
                <option>深圳</option>
            </select>
            {{selectArr}}
        </div>


    </div>
    <script>
        var vm=new Vue({
           el:'#app',
           data:{
              textValue: 'abc',
              mulTextValue:'def',
              mulCheckboxValue:[],
              radioValue:'',
              selectValue:'北京',
              selectArr:[]
            },
           methods:{

            },
        });
    </script>
</body>

</html>

三、组件的注册、通信

1、组件的注册

局部注册和全局注册
      1、全局注册一般用的较少,有三种方式。都是基于Vue.component方法来注册的,代码如下。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="/vue.js"></script>
</head>

<body>
    <div id="app">
        <!-- 注意:这种写法加载不出来,组件不能使用驼峰写法 -->
         <myComponent></myComponent>
        <!-- 想显示的话,使用以下方式可以显示 -->
         <my-component></my-component>
         <div id = 'myComponent'>
             <span>我是子组件</span>
         </div>
         <div>
            <span>我是背景</span>
        </div>

    </div>
    <script>
        // 注册全局组件
         Vue.component('myComponent',{
             template:"#myComponent"
         });
        //  
         var vm = new Vue({
              el:"#app",
              data:{

              }
         })
       
    </script>
</body>

</html>

      2、局部注册,父子组件之间注册,import导入子组件头文件,然后在父组件中引入头文件。同var vm = new Vue({})创建的实例中,用components:{ "子组件名":子组件文件名,}属性来定义,代码如下
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="../vue.js"></script>
</head>

<body>
    <div id="app">
          <partcomponent></partcomponent>
         <div id ='partcomponent' >
            <h3>我是子组件</h3>
         </div>

    </div>
    <script>
        // import partcomponent from '/partcomponent.js'
        var vm=new Vue({
           el:'#app',
           data:{

            },
           methods:{

            },
            // 注册局部组件
            components:{
                "partcomponent":{
                    template :'#partcomponent'
                }
            }
        });
    </script>
</body>

</html>

2、组件的通信(值传递 以局部注册来演示)

1、父传子传值
     首先在子组件中用自定义组件中使用 props 定义属性,然后在
     template中把属性写在应该显示的地方。然后在父组件调用子
     组件的地方,把属性填上,并且给予值(值可以是直接写死,
     也可以通过data中的数据定义)。  代码如下
2、子给父传值
    在子组件中,@click调用一个方法,然后在methods中,实现这个方
    然后用this.$emit,触发一个方法,(方法必须全部小写,否则调用
    不到),然后在父页面调用组件的里面@newclick,然后自定义一
    个父类中可以调用的方法,即可在父页面,操作,取值等
子组件代码
const partcomponent = {
   // @click只能放在原组件上,这里相当于,用this.$emit给父组件定义了一个调用方法
   template:`
   <li @click = 'handleClick'>{{ title }}</li> `,
   // 父组件传过来的值存在了title里,然后直接把title放在组件赋值的地方
   props:["title"],
   // this.$emit('onClick')
   methods:{
       handleClick(){
           // 定义父组件可以调用的方法 @libtnclick,这里必须要小写,否则无法调用到
           // this.$emit(方法名,传参)
           this.$emit('libtnclick',100)
       }
   }
}

export default partcomponent

父页面代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="../vue.js"></script>
</head>

<body>
    <div id="app">
        <!-- @libtnclick 就是$emit创建链接的方法名,handleClick调用以下,能看到参数传过来了 -->
          <partcomponent  :title = "msg" @libtnclick = 'handleClick'></partcomponent>
        

    </div>
    <script type="module">
        import partcomponent from './partcomponent.js';
        var vm=new Vue({
           el:'#app',
           data:{
              msg:'我是父组件传过来的数据'
            },
           methods:{
             handleClick(res){
                    console.log(res)
                }
            },
            // 注册局部组件
            components:{partcomponent}
        });
    </script>
</body>

</html>

四、插槽

   这个没啥说的,就是在自定义组件中间插入内容的方法。 在自定义组件的template里,想在哪
   加标签,就写个   <slot></slot>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值