Vue2自定義指令改變DOM值後未刷新data中綁定屬性的值

来源:http://www.cnblogs.com/jehorn/archive/2017/11/29/7922101.html
-Advertisement-
Play Games

Vue2自定義指令改變DOM值後未刷新data中綁定屬性的值. ...


標簽(空格分隔): Vue


自定義指令用於過濾輸入框,只允許輸入數字:

Vue.directive('numberOnly', {
    bind: function (el, binding) {
        el.handler = function () {
            el.value = el.value.replace(/[^\d]/g, '');
        }
        el.addEventListener('input', el.handler);
    },
    unbind: function (el) {
        el.removeEventListener('input', el.handler);
    }
});

在DOM中使用如下所示:

<input type="text" name="image-code" class="input" placeholder="圖片驗證碼" autocomplete="off" v-model="imageCode" v-number-only />

此時可以實現在輸入框中只能輸入數字,輸入其它字元不予顯示。但是在提交表單的時候使用this.imageCode卻發現,字元中有一個剛纔試驗的非數字字元,如圖所示:

vue-custom-directive

這該怎麼辦呢?通過閱讀文檔,我目前使用傳遞自定義指令value屬性的方法來data中的屬性賦值。使用這個方法,可以不綁定v-mode="",當然綁定了也沒什麼區別:

Vue.directive('numberOnly', {
    bind: function (el, binding) {
        el.handler = function () {
            el.value = el.value.replace(/[^\d]/g, '');

            // 手動刷新data中綁定的屬性
            binding.value.set[binding.value.name] = el.value;
        }
        el.addEventListener('input', el.handler);
    },
    unbind: function (el) {
        el.removeEventListener('input', el.handler);
    }
});

此時在DOM中就需要傳遞兩個屬性:

<input type="text" name="image-code" class="input" placeholder="圖片驗證碼" autocomplete="off" v-model="imageCode" v-number-only="{ set: this, name: 'imageCode' }" />

這樣this.imageCode當中就不會出現非數字字元串了。

你可能想說,直接在set中指定this.imageCode,然後在自定義指令中binding.value.set = el.value;,不就可以了嘛。然而經過測試這樣是起不到作用的。

這個方案並不優雅,如果有其它解決方案,還望不吝賜教。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、導入資源 2、JSP代碼 3、Js代碼 註意: 4、controller代碼 5、工具類 ...
  • 前言 除了瀏覽器提供的原生事件外,有時我們還需要自定義事件以滿足特定的需求,比如小模塊之間的通信,傳遞信息等。JavaScript提供了幾種自定義事件的方式: 1. Event() 構造函數, 創建一個新的事件對象 Event 2. CustomEvent() 創建一個自定義事件 3. docume ...
  • HTML頁面跳轉: window.open(url, "", "width=600,height=400"); 第二個參數:_self,在當前視窗打開視窗;_blank(預設值),在另外的新建視窗打開新視窗; window.location.href="http://www.jb51.net"; / ...
  • 問題如下圖所示: 一般處理此類問題都會有一個屬性:”event.preventDefault()”,但是如果直接使用會導致頁面的內部滾動也失效導致不能滾動,我所處理的方式也與其類似。 因為滑動區域是向走的,所以滑動塊的頂部到瀏覽器頂部的距離最大為0(其餘為負值[$('#bodycthead').of ...
  • 1.JavaScript中的註釋方式有以下兩種 // This is an in-line comment. /* This is a multi-line comment */ 2.avaScript提供七種不同的data types(數據類型), undefined(未定義) null(空) b ...
  • HTML5樣式、鏈接和表格HTML5列表<ol> 有序列表<ul> 無序列表<li> 列表項 <dl> 列表<dt> 列表項<dd> 描述 1.無序列表 使用<ul>、<li> 屬性:disc、circle、square2.有序列表 使用<ol>、<li> 屬性:A、a、I、i、start3.嵌套列 ...
  • css3選擇器是在css2.0的基礎上的修改創新。他增加了一些UI元素狀態偽類選擇器、結構偽類選擇器、屬性選擇器等。 ...
  • 知識點一: CSS概念:CSS 指層疊樣式表 (Cascading Style Sheets)(級聯樣式表) Css是用來美化html標簽的,相當於頁面化妝。 知識點二: 選擇器格式與部分屬性: 寫法: 選擇器是一個選擇(一/多個)標簽的過程。 對應的屬性與值表: Width:20px; 寬 Hei ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...