非prop属性的值
一个非 prop 的 attribute 是指传向一个组件,但是该组件并没有相应 prop 定义的 attribute。

因为显式定义的 prop 适用于向一个子组件传入信息,然而组件库的作者并不总能预见组件会被用于怎样的场景。这也是为什么组件可以接受任意的 attribute,而这些 attribute 会被添加到这个组件的根元素上。

例如,想象一下你通过一个 Bootstrap 插件使用了一个第三方的 bootstrap-date-input 组件,这个插件需要在其 input 上用到一个 data-date-picker attribute。我们可以将这个 attribute 添加到你的组件实例上:


然后这个 data-date-picker=“activated” attribute 就会自动添加到 的根元素上。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://unpkg.com/vue@next"></script>
    <style>
        .bg1 {
            background: #C1FFE4;
        }

        .bg2 {
            width: 120px;
            ;
        }
    </style>
</head>

<body>
    <div id="app">
        <input-con class="bg2" type="password"></input-con>
    </div>
    <script>
        const vm = Vue.createApp({});
        vm.component('input-con', {
            // template: '<input class="bg1"',
            template: '<input class="bg1" type="text"',
            inheritAttrs: false,  //不会继承外部组件的属性;,即password不会覆盖text
        });
        //在指定的dom上装载应用程序;
        vm.mount('#app');
    </script>
</body>

</html>

Vue3 中的setup 一种是setup函数,一种是script setup
setup函数
setup函数原理说明
由于setup 是在beforeCreate 和 create 生命周期阶段,组件还没有创建,即还没有进入 data 方法 阶段。
setup 返回的结果集 作为 (传统写法)data 和 method 的值,确切点说是绑定到 组件对象的属性。

setup函数特性
1、setup函数是处于 生命周期函数 beforeCreate 和 Created 两个钩子函数之间的函数 也就说在 setup函数中是无法 使用 data 和 methods 中的数据和方法的
2、setup函数是 Composition API(组合API)的入口
3、在setup函数中定义的变量和方法最后都是需要 return 出去的 不然无法再模板中使用

setup 函数将接收两个参数,props&context
Props :props接收父组件传入的值,为Proxy对象,且为响应式,所以不能使用 ES6 解构,它会消除 prop 的响应性

setup 包含的生命周期
onBeforeMount——挂载开始前调用
onMount——挂载后调用
onBeforeUpdate——当响应数据改变,且重新渲染前调用
onUpdated——重新渲染后调用
onBeforeUnmount——Vue实例销毁前调用
onUnmounted——实例销毁后调用
onActivated——当keep-alive组件被激活时调用
onDeactivated——当keep-alive组件取消激活时调用
onErrorCaptured——从子组件中捕获错误时调用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>setup函数的案例</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>

<body>
    <div id="app">
        <post-item :post-content="content"></post-item>
    </div>
    <script>
        //创建一个应用程序案例;
        const vm = Vue.createApp({
            data() {
                return {
                    content: '越来越细'
                }
            }
        });
        //创建组件;
        vm.component('PostItem', {
            //声明props
            props: ['postContent'],
            setup(props) {
                Vue.watchEffect(() => {
                    console.log(props.postContent);
                });
            },
            template: '<h3>{{ postContent }}</h3>',
        });
        //在指定的DOM元素上装载应用程序实例的根组件;
        vm.mount('#app');
    </script>
</body>

</html>
Logo

前往低代码交流专区

更多推荐