<template>
<div>
<button v-custom="{ goodsId, event: getFun }">按钮</button>
</div>
</template>
<script setup lang="ts">
const goodsId = ref(100);
setTimeout(() => {
goodsId.value = 200;
}, 1000);
setTimeout(() => {
goodsId.value = 300;
}, 3000);
setTimeout(() => {
goodsId.value = 400;
}, 4000);
const getFun = (e: any) => {
console.log("点击事件", e);
};
</script>
import { Directive } from "vue";
const custom: Directive = {
mounted(el, binding, vnode) {
el.__onClick__ = () => {
let { goodsId, event } = binding.value;
event(goodsId);
};
el.addEventListener("click", el.__onClick__);
}
};
export default custom;
每次点击都要获取最新的goodsId,当前这个写法只能获取初始的goodsId: 100,自定义指令无法获取到goodsId的最新值。
尝试过的方法:
1、在updated内再一次获取最新值,但是每次点击,事件会触发多次。
2、在vnode上获取最新值,同样无法获取到最新值。
在此想请教一下各位
指令 v-custom="{ goodsId, event: getFun }"是在模板中使用的, vue会unref,导致 mounted的时候 binding的value中goodsId的值是具体的值,而不是ref. 所以你可以使用 reactive而不是ref.
在 update 中获取最新值时删除旧的回调函数。
主要内容:实例,实例,钩子,实例,实例,实例除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。 下面我们注册一个全局指令 v-focus, 该指令的功能是在页面加载时,元素获得焦点: 实例 <div id="app"> <p>页面载入时,input 元素自动获取焦点:</p> <input v-focus> </div> <script> const app = Vue.createApp({}
问题内容: 如果我有一个没有模板的AngularJS指令,并且希望它在当前作用域上设置一个属性,那么最好的方法是什么? 例如,计算按钮点击次数的指令: 使用伪指令将点击计数分配给双向属性中的表达式: 有一个更好的方法吗?从我所读的内容来看,孤立的作用域会过大,但是我需要一个子作用域吗?除了使用以外,还有没有更干净的方法可以写回指令属性中定义的范围变量。我只是觉得我很难过。 这里有完整的柱塞。 问题
创建自定义指令 第一步,创建一个自定义命令类文件,新建application/common/command/Hello.php <?php namespace app\common\command; use think\console\Command; use think\console\Input; use think\console\input\Argument; use think\con
自定义指令可以使用 macro 指令来定义, 这是模板设计者所关心的内容。 Java程序员若不想在模板中实现定义指令,而是在Java语言中实现指令的定义, 这时可以使用 freemarker.template.TemplateDirectiveModel 类来扩展 (请参考 后续章节)。 基本内容 宏是有一个变量名的模板片段。可以在模板中使用宏作为自定义指令, 这样就能进行重复性的工作。例如,创建
问题内容: 我有一个C#/ Selenium / Specflow测试套件,正在使用xunit.console.exe使用Jenkins运行。我需要将这些测试指向不同的环境(Test / QA / Prod等),并想使用命令行参数。 我正在调用的批处理命令是: 并希望包含一个额外的参数,例如: “ -env = PROD”, 以将该作业指向特定的环境。 我愿意采取更好的方法。 问题答案: 对于此解
主要内容:实例,实例,钩子,实例,实例除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。 下面我们注册一个全局指令 v-focus, 该指令的功能是在页面加载时,元素获得焦点: 实例 <div id="app"> <p>页面载入时,input 元素自动获取焦点:</p> <input v-focus> </div> <script> // 注册一个全局自定义指令 v-focus Vue.d