FE - 走向Node与Webpack 之路 - Vue 数据过滤与组件通讯

1. vue 数据过滤

数据过滤,可以通过全局 Vue.filter 定义规则,也可以局部实现过滤。

局部过滤:

 export default {
        name: 'app',
        components: {

        },
        data () {
            return {
                numbers: [1, 2, 3, 4, 5],
            }
        },
        methods:{//过滤可以被2整除的
            even: function (nums) {
                return nums.filter(function (num) {
                    return num%2===0;
                })
            }
        },
        computed:{//过滤可以被2整除的
            evenNums:function () {
                return this.numbers.filter(function (number) {
                    return number%2===0;
                })
            },
        }
    }

html 实现如下 :

       <h3>for - methods 过滤 </h3>
        <ul>
            过滤的当参数传入
            <li v-for="n in even(numbers)" >{{n}}</li>
        </ul>

        <h3>for - computed 过滤 </h3>
        <ul>
            直接返回过滤后的结果
            <li v-for="n in evenNums">{{n}}</li>
        </ul>

全局过滤器:

// 注册
Vue.filter('my-filter', function (value) {
  // 返回处理后的值
})
// getter,返回已注册的过滤器
var myFilter = Vue.filter('my-filter')

2.组件间通信

vue实现都是通过各个组件直接的组合,形成界面;

(1)父子组件通讯

父 -> 子 : props

父组件向子组件传值的时候,子组件需要定义props字段,比如:
props 定义的字段就与data中的字段一样,可以通用了。

Child.vue

<template>
    <div>
        <p>{{item.name}} | {{item.age}}</p>
    </div>
</template>

<script>
    export default {
        name: "Child",
        props: ["item"],
    }
</script>

<style>

</style>

parent.vue

父组件在使用子组件的时候,加载,注册,使用;
前面在child.vue中注册了 props字段 item , 在使用子组件的时候,可以直接添加item="" 属性即可,将参数传入父组件。

<template>
    <div>
        <h1>演示子控件与父控件交互</h1>

        <h3>to Child : child data show</h3>
        <demo-child
                v-for="item in items"
                v-bind:item="item" //添加item属性传入item参数
        ></demo-child>
    </div>
</template>

<script>
    //导入自组件
    import Child from "./child.vue"

    export default {
        name: "parent",
        data(){
            return {
                items: [
                    {name: "labelnet", age: 24},
                    {name: "yuan", age: 18},
                    {name: "Xming", age: 28},
                ],
                item: {},
            }
        },
        components: { //注册子组件
            "demo-child": Child
        },


    }
</script>

<style>

</style>

子 -> 父 : 自定义事件

子组件向父组件传递信息,需要自定义事件,事件的触发使用 $emit ;

child.vue

我们把当前itemage +100返回;在method中定义方法,$emit('当前方法名',参数....) , 比如定义toparent 方法,button点击的时候,触发这个方法。如果想要父组件获取到emit传出的item参数,在父组件中也要定义一个方法,见下文。

<template>
    <div>
        <p>{{item.name}} | {{item.age}}</p>
        <button @click="toparent" >toparent</button>
    </div>
</template>

<script>
    export default {
        name: "Child",
        props: ["item"],
        methods: {
            toparent: function () {
                this.item.age += 100;
                this.$emit("toparent",this.item);
            }
        },
    }
</script>

<style>

</style>

parent.vue
在使用子组件的时候,可以直接添加我们再子组件中自定义的toparent事件,就是当点击的时候,相应父组件中的那个方法 ,比如我们的 fromChild方法,见 methods . fromChild可以讲上面的传入的item获取出来。

<template>
    <div>
        <h1>演示子控件与父控件交互</h1>
        <h3>to Child : child data show</h3>
        <demo-child
                v-for="item in items"
                v-bind:item="item"
                @toparent="fromChild"
        ></demo-child>
        <h3>from Child : parent data show</h3>
        <p>{{item}}</p>
    </div>
</template>

<script>
    import Child from "./child.vue"

    export default {
        name: "parent",
        data(){
            return {
                items: [
                    {name: "labelnet", age: 24},
                    {name: "yuan", age: 18},
                    {name: "Xming", age: 28},
                ],
                item: {},
            }
        },
        components: {
            "demo-child": Child
        },
        methods: {
            fromChild: function (item) {
                this.item=item;
            }
        }

    }
</script>

<style>

</style>

(2)非父子组件通信

见官网

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值