zoukankan      html  css  js  c++  java
  • vue组件事件

    1.双向绑定及指令

    v-bind:可省v-on:@的缩写 

    Vue.js为最常用的两个指令v-bindv-on提供了缩写方式。v-bind指令可以缩写为一个冒号,v-on指令可以缩写为@符号。

    <!--完整语法--><a href="javascripit:void(0)" v-bind:class="activeNumber === n + 1 ? 'active' : ''">{{ n + 1 }}</a><!--缩写语法--><a href="javascripit:void(0)" :class="activeNumber=== n + 1 ? 'active' : ''">{{ n + 1 }}</a>

    <!--完整语法--><button v-on:click="greet">Greet</button><!--缩写语法--><button @click="greet">Greet</button>

    2. 组件

    1.组件:提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树:

    那么什么是组件呢?
    组件可以扩展HTML元素,封装可重用的HTML代码,我们可以将组件看作自定义的HTML元素。

    2.组件的创建和注册

    Vue.js的组件的使用有3个步骤:创建组件构造器、注册组件和使用组件。

    理解组件的创建和注册

    我们用以下几个步骤来理解组件的创建和注册:

    1. Vue.extend()Vue构造器的扩展,调用Vue.extend()创建的是一个组件构造器。 
    2. Vue.extend()构造器有一个选项对象,选项对象的template属性用于定义组件要渲染的HTML。 
    3. 使用Vue.component()注册组件时,需要提供2个参数,第1个参数时组件的标签,第2个参数是组件构造器。 
    4. 组件应该挂载到某个Vue实例下,否则它不会生效。

    <!DOCTYPE html>

    <html>

    <body>

    <div id="app">

    <!-- 3. #app是Vue实例挂载的元素,应该在挂载元素范围内使用组件-->

    <my-component></my-component>

    </div>

    </body>

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

    <script>

     

    // 1.创建一个组件构造器

    var myComponent = Vue.extend({

    template: '<div>This is my first component!</div>'

    })

     

    // 2.注册组件,并指定组件的标签,组件的HTML标签为<my-component>

    Vue.component('my-component', myComponent)

     

    new Vue({

    el: '#app'

    });

     

    </script>

    </html>

    全局注册和局部注册

    调用Vue.component()注册组件时,组件的注册是全局的,这意味着该组件可以在任意Vue示例下使用。
    如果不需要全局注册,或者是让组件使用在其它组件内,可以用选项对象的components属性实现局部注册。

    父组件和子组件

    组件注册语法糖

    以上组件注册的方式有些繁琐,Vue.js为了简化这个过程,提供了注册语法糖。

    使用Vue.component()直接创建和注册组件:

    Vue.component()的第1个参数是标签名称,第2个参数是一个选项对象,使用选项对象的template属性定义组件模板。
    使用这种方式,Vue在背后会自动地调用Vue.extend()

     

    使用script或template标签

    template选项中拼接HTML元素比较麻烦,这也导致了HTMLJavaScript的高耦合性。
    庆幸的是,Vue.js提供了两种方式将定义在JavaScript中的HTML模板分离出来。

    组件的el和data选项

    使用props父传子组件实例的作用域是孤立的。这意味着不能并且不应该在子组件的模板内直接引用父组件的数据。可以使用 props 把数据传给子组件。

    <child-component v-bind:子组件prop="父组件数据属性"></child-component>

    双向绑定

    可以使用.sync显式地指定双向绑定,这使得子组件的数据修改会回传给父组件。

    <my-component v-bind:my-name.sync="name" v-bind:my-age.sync="age"></my-component>

    单次绑定

    可以使用.once显式地指定单次绑定,单次绑定在建立之后不会同步之后的变化,这意味着即使父组件修改了数据,也不会传导给子组件。

    <my-component v-bind:my-name.once="name" v-bind:my-age.once="age"></my-component>

    1. prop验证

    props: {data: Array,columns: Array,filterKey: String}

    这段代码表示:父组件传递过来的data和columns必须是Array类型,filterKey必须是字符串类型。
    更多prop验证的介绍,请参考:官方文档prop验证

    2. filterBy过滤器

    可以根据指定的字符串过滤数据。

    3. slot插槽和父子组件之间的访问和通信

    组件的API主要来源于以下三部分:

    • prop 允许外部环境传递数据给组件;
    • 事件 允许组件触发外部环境的 action;
    • slot 允许外部环境插入内容到组件的视图结构内

    https://www.cnblogs.com/keepfool/p/5637834.html

    1.slot是一个非常有用的东西,它相当于一个内容插槽,它是我们重用组件的基础。Vue的事件系统独立于原生的DOM事件,它用于组件之间的通信。<slot>元素是一个内容插槽组件的编译作用域

    • 在组件template中使用<slot>标签作为内容插槽
    • 使用$children, $refs, $parent 实现父子组件之间的实例访问
    • 在子组件中,使用$dispatch向父组件派发事件;在父组件中,使用$broadcast向子组件传播事件
    • 结合这些基础知识,我们一步一步实现一个CURD的示例

    父组件模板的内容在父组件作用域内编译;子组件模板的内容在子组件作用域内编译

    通俗地讲,在子组件中定义的数据,只能用在子组件的模板。在父组件中定义的数据,只能用在父组件的模板。如果父组件的数据要在子组件中使用,则需要子组件定义props

    在定义modal-dialog组件的template时,我们使用了3个slot,它们的name特性分别是header、body和footer。

    <modal-dialog>标签下,分别为三个元素指定slot特性:

     

    如果需要定制对话框的样式,我们只需要在<modal-dialog>上追加一v-bind指令,让它绑定一个class。

    <modal-dialog v-bind:show.sync="show" v-bind:class="dialogClass">

    2.父子组件之间的访问

    有时候我们需要父组件访问子组件,子组件访问父组件,或者是子组件访问根组件。
    针对这几种情况,Vue.js都提供了相应的API:

    • 父组件访问子组件:使用$children或$refs
    • 子组件访问父组件:使用$parent
    • 子组件访问根组件:使用$root

    $refs示例

    组件个数较多时,我们难以记住各个组件的顺序和位置,通过序号访问子组件不是很方便。
    在子组件上使用v-ref指令,可以给子组件指定一个索引ID

     

    $parent示例

    下面这段代码定义了两个组件:child-component和它的父组件parent-component。
    在子组件中,通过this.$parent可以访问到父组件的实例。

    3.自定义事件

    有时候我们希望触发父组件的某个事件时,可以通知到子组件;触发子组件的某个事件时,可以通知到父组件。
    Vue 实例实现了一个自定义事件接口,用于在组件树中通信。这个事件系统独立于原生 DOM 事件,用法也不同。

    每个 Vue 实例都是一个事件触发器:

    使用 $on() 监听事件;

    使用 $emit() 在它上面触发事件;

    使用 $dispatch() 派发事件,事件沿着父链冒泡;

    使用 $broadcast() 广播事件,事件向下传导给所有的后代

    派发事件

     

    广播事件

     

     

     

     

  • 相关阅读:
    linux 命令
    linux 命令
    linux 命令
    linux命令
    ubuntu 下安装ssh服务,并修改ssh端口
    爬虫基础
    Django之中间件
    Django之用户认证组件
    Django之cookie&session
    Django之forms组件
  • 原文地址:https://www.cnblogs.com/benbenjia/p/12055289.html
Copyright © 2011-2022 走看看