首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vue2,注意不要触发

vue2,注意不要触发
EN

Stack Overflow用户
提问于 2022-07-19 07:35:54
回答 1查看 47关注 0票数 0

我在Laravel项目工作,我的前线是Vue 2。

我尝试呈现一个由用户更改的输入表单,并在用户更改任何内容后触发。

我试图将我的react应用程序复制到Vue,并希望使用useEffect钩子作为触发器。

数据: loanTypingDetails改变了,而手表中的函数不触发(console.log .)

模板

代码语言:javascript
复制
<form className="details-loan-input">
    <h4>
        <input
            type="number"
            name="loanAmount"
            min="10000"
            :value="loanTypingDetails.loanAmount"
            max="10000000"
            step="10000"
            @change="handleInputChange"
            required="{true}"
        />
        <span>סכום</span>
    </h4>
    <h4>
        <input
            type="number"
            name="loanPeriodYears"
            min="1"
            :value="loanTypingDetails.loanPeriodYears"
            max="50"
            step="0.5"
            @change="handleInputChange"
            required="{true}"
        />
        <span>תקופת הלוואה בשנים</span>
    </h4>
    <h4>
        <input
            type="number"
            name="annualInterest"
            :value="loanTypingDetails.annualInterest"
            min="5"
            max="50"
            step="0.5"
            @change="handleInputChange"
        />
        <span>ריבית שנתית</span>
    </h4>
    <h4>
        <input
            type="date"
            name="loanStartDate"
            :value="loanTypingDetails.loanStartDate"
            @change="handleInputChange"
            required="{true}"
        />
        <span>תאריך תחילת הלוואה</span>
    </h4>
</form>

脚本

代码语言:javascript
复制
...

export default {
    data() {
        return {
            loanTypingDetails: initLoanTypingDetails,
            loanDetails: null,
        };
    },
    methods: {
        handleInputChange(e) {
            const {
                target: { name, value },
            } = e;
            if (name === "loanStartDate") {
                this.loanTypingDetails[name] = value;
            } else {
                this.loanTypingDetails[name] = Number(value);
            }
        },
    },
    watch: {
        // loanTypingDetails(newValue, oldValue) {
        //     console.log(newValue, oldValue);
        // },
        loanTypingDetails: (newValue, oldValue) => {
            console.log(newValue, oldValue);
        },
    },
};
EN

回答 1

Stack Overflow用户

发布于 2022-07-19 07:53:49

默认情况下,Watch是浅的:只有当被监视的属性被分配了一个新值时,回调才会触发--它不会在嵌套的属性更改上触发。如果您希望对所有嵌套的突变触发回调,则需要使用深度监视器。

所以你可能需要把你的手表换成这样:

代码语言:javascript
复制
watch: {
    // loanTypingDetails(newValue, oldValue) {
    //     console.log(newValue, oldValue);
    // },
    loanTypingDetails: {
      handler(newValue, oldValue) {
        console.log(newValue, oldValue);
      },
      deep: true
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73032866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档