我是Laravel Livewire的新手.我正在try 保留一个表格字段,其中我正在使用intlTelImpusion JS库在电话号码之前添加国家代码.

我在app.js中添加了JS代码,大致是这样的.

import intlTelInput from 'intl-tel-input';
const elementsWithPhoneId = document.querySelectorAll('[id="phone"]');
elementsWithPhoneId.forEach(element => {

    const iti = intlTelInput(element, {
        initialCountry: "bh",
        separateDialCode: true,
        onlyCountries: ['bh', 'sa', 'ae', 'qa', 'kw', 'om', 'us', 'gb'],
        utilsScript: "https://cdn.jsdelivr.net/npm/intl-tel-input@21.1.1/build/js/utils.js",
    });
});

组件中的字段看起来像这样

<div class="flex flex-wrap lg:flex-nowrap justify-center w-full">
    <div class="w-full py-2 lg:w-1/2 md:w-1/2 px-2 grid grid-cols-1">
        <label for="inputC1P1" class="w-full font-medium py-1">Primary Phone : <span class="text-red-600"> *</span></label>
        <input
            required
            type="tel"
            class="form-input border border-1 rounded-md w-full my-1 border-gray-300 shadow-md hover:transition-all"
            id="phone"
            placeholder="3344 5566"
            wire:model.blur="C1PrimaryContact"
        />
        <div>
            @error('C1PrimaryContact') <p class="text-red-600 font-light text-xs antialiased italic">{{ $message }}</p>  @enderror
        </div>
    </div>
    <div class="w-full py-2 lg:w-1/2 md:w-1/2 px-2 grid grid-cols-1">
        <label for="inputC1P2" class="w-full font-medium py-1">Secondary Phone :</label>
        <input
            type="tel"
            class="form-input border border-1 rounded-md w-full my-1 border-gray-300 shadow-md hover:transition-all"
            id="phone"
            placeholder="3344 5566"
            wire:model.blur="C1SecondaryContact"
        />
        <div>
            @error('C1SecondaryContact') <p class="text-red-600 font-light text-xs antialiased italic">{{ $message }}</p> @enderror
        </div>
    </div>
</div>

当组件第一次加载时,它的加载完全正常.然而,一旦我们更改某些内容或提交表单,它就会停止工作,整个app.js就会停止工作.

我已经做了一些替代方案,例如在具有@script @endscript个Blade 指令的组件内添加JS代码,甚至apply.

document.addEventListener('livewire:init', () => {})

到目前为止,还需要其他东西.我是否缺少任何内容,或者我需要在Livewire设置中配置某些内容?

推荐答案

您可以避免Livewire的多姆更新,例如,在输入周围使用wire:ignore,并带有一个dis:

<div class="w-full py-2 lg:w-1/2 md:w-1/2 px-2 grid grid-cols-1">

    <label .... > .... </label>
    
    <div class="...." wire:ignore>
       <input .... />
    <div>

    .....

请注意,您正在为两个输入分配相同的id:这不是一个好做法,id必须是唯一的.您可以 Select 另一个属性来 Select 输入,例如:

const elementsWithPhoneId = document.querySelectorAll("input[type=tel]");

特定的类可以是另一种 Select .

此外,标签的for个属性与相关输入ID不匹配.

编辑

查看您的存储库,我可以看到您使用redirectRoute()navigate: true选项.这会导致主体更新,而浏览器文档没有实际更新,因此必须强制外部库重新初始化相关元素. 为了实现这一点,我们可以将Inbox type-tel输入的代码移动到livewire:navigated事件的事件监听器中:

document.addEventListener('livewire:navigated', () => {

    const elementsTypePhone = document.querySelectorAll("input[type=tel]");

    elementsTypePhone.forEach(element => {

        // console.log ("element: ", element);

        const iti = intlTelInput(element, {

            initialCountry: "bh",
            strictMode: true,
            separateDialCode: true,
            onlyCountries: ['bh', 'sa', 'ae', 'qa', 'kw', 'om', 'us', 'gb'],
            utilsScript: "https://cdn.jsdelivr.net/npm/intl-tel-input@21.1.1/build/js/utils.js",
        });
    });
});

Laravel相关问答推荐

Nuxt 3获取多部分表单数据上传不起作用

如何在laravel中输出奇偶行

Laravel Valet 安装后 Ping test.dev 返回未知主机

Laravel belongsTo 关系 - 试图获取非对象的属性

Laravel 重定向数据不工作

在集合 laravel 中使用查询范围

Laravel 5.5 类型错误:传递给 Illuminate\Auth\EloquentUserProvider::validateCredentials() 的参数 1 必须是实例

合并和排序两个 Eloquent 集合?

从 Laravel Cashier 获取下一个账单日期

如何仅从 laravel FormRequest 中获取经过验证的数据?

如何在新安装时指定 Lumen(或 Laravel)版本?

在 Laravel Eloquent 中,limit 与 take 有什么区别?

调用未定义的方法 Maatwebsite\Excel\Excel::load()

Laravel 应用程序中应用程序键的意义是什么?

WhereNotExists Laravel Eloquent

在 Eloquent 中按自定义顺序对集合进行排序

判断输入是否来自控制台

无法声明类 Controller,因为该名称已在使用中

使用 Nginx 设置 Laravel

Laravel s3 多桶