vue-品牌管理案例-指令和過濾器

来源:https://www.cnblogs.com/ygjzs/archive/2019/11/03/11789268.html
-Advertisement-
Play Games

過濾器的基本使用 定義一個過濾器 過濾器可以使用多個· 下麵js代碼的HTML部分 定義一個私有過濾器和私有指令 javascript // 如何自定義一個私有的過濾器(局部) var vm2 = new Vue({ el: ' app2', data: { dt: new Date() }, me ...


過濾器的基本使用

定義一個過濾器

 <div id="app">
    <p>{{ msg | msgFormat('瘋狂+1', '123') | test }}</p>
  </div>
// 定義一個 Vue 全局的過濾器,名字叫做  msgFormat
    Vue.filter('msgFormat', function (msg, arg, arg2) {
      // 字元串的  replace 方法,第一個參數,除了可寫一個 字元串之外,還可以定義一個正則
      return msg.replace(/單純/g, arg + arg2)
    })

    Vue.filter('test', function (msg) {
      return msg + '========'
    })


    // 創建 Vue 實例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        msg: '曾經,我也是一個單純的少年,單純的我,傻傻的問,誰是世界上最單純的男人'
      },
      methods: {}
    });

過濾器可以使用多個·

下麵js代碼的HTML部分

  <div id="app">
    <!-- {{1+1}} -->


    <div class="panel panel-primary">
      <div class="panel-heading">
        <h3 class="panel-title">添加品牌</h3>
      </div>
      <div class="panel-body form-inline">
        <label>
          Id:
          <input type="text" class="form-control" v-model="id">
        </label>

        <label>
          Name:
          <input type="text" class="form-control" v-model="name" @keyup.f2="add">
        </label>

        <!-- 在Vue中,使用事件綁定機制,為元素指定處理函數的時候,如果加了小括弧,就可以給函數傳參了 -->
        <input type="button" value="添加" class="btn btn-primary" @click="add()">

        <label>
          搜索名稱關鍵字:
          <!-- 註意: Vue中所有的指令,在調用的時候,都以 v- 開頭 -->
          <input type="text" class="form-control" v-model="keywords" id="search" v-focus v-color="'green'">
        </label>
      </div>
    </div>



    <table class="table table-bordered table-hover table-striped">
      <thead>
        <tr>
          <th>Id</th>
          <th>Name</th>
          <th>Ctime</th>
          <th>Operation</th>
        </tr>
      </thead>
      <tbody>
        <!-- 之前, v-for 中的數據,都是直接從 data 上的list中直接渲染過來的 -->
        <!-- 現在, 我們自定義了一個 search 方法,同時,把 所有的關鍵字,通過傳參的形式,傳遞給了 search 方法 -->
        <!-- 在 search 方法內部,通過 執行 for 迴圈, 把所有符合 搜索關鍵字的數據,保存到 一個新數組中,返回 -->
        <tr v-for="item in search(keywords)" :key="item.id">
          <td>{{ item.id }}</td>
          <td v-text="item.name"></td>
          <td>{{ item.ctime | dateFormat() }}</td>
          <td>
            <a href="" @click.prevent="del(item.id)">刪除</a>
          </td>
        </tr>
      </tbody>
    </table>



  </div>

定義一個私有過濾器和私有指令

// 如何自定義一個私有的過濾器(局部)
    var vm2 = new Vue({
      el: '#app2',
      data: {
        dt: new Date()
      },
      methods: {},
      filters: { // 定義私有過濾器    過濾器有兩個 條件  【過濾器名稱 和 處理函數】
        // 過濾器調用的時候,採用的是就近原則,如果私有過濾器和全局過濾器名稱一致了,這時候 優先調用私有過濾器
        dateFormat: function (dateStr, pattern = '') {
          // 根據給定的時間字元串,得到特定的時間
          var dt = new Date(dateStr)

          //   yyyy-mm-dd
          var y = dt.getFullYear()
          var m = (dt.getMonth() + 1).toString().padStart(2, '0')
          var d = dt.getDate().toString().padStart(2, '0')

          if (pattern.toLowerCase() === 'yyyy-mm-dd') {
            return `${y}-${m}-${d}`
          } else {
            var hh = dt.getHours().toString().padStart(2, '0')
            var mm = dt.getMinutes().toString().padStart(2, '0')
            var ss = dt.getSeconds().toString().padStart(2, '0')

            return `${y}-${m}-${d} ${hh}:${mm}:${ss} ~~~~~~~`
          }
        }
      },
      directives: { // 自定義私有指令
        'fontweight': { // 設置字體粗細的
          bind: function (el, binding) {
            el.style.fontWeight = binding.value
          }
        },
        'fontsize': function (el, binding) { // 註意:這個 function 等同於 把 代碼寫到了 bind 和 update 中去
          el.style.fontSize = parseInt(binding.value) + 'px'
        }
      }
    })


    // 過濾器的定義語法
    // Vue.filter('過濾器的名稱', function(){})

    // 過濾器中的 function ,第一個參數,已經被規定死了,永遠都是 過濾器 管道符前面 傳遞過來的數據
    /* Vue.filter('過濾器的名稱', function (data) {
      return data + '123'
    }) */

全局過濾器

// 全局的過濾器, 進行時間的格式化
    // 所謂的全局過濾器,就是所有的VM實例都共用的
    Vue.filter('dateFormat', function (dateStr, pattern = "") {
      // 根據給定的時間字元串,得到特定的時間
      var dt = new Date(dateStr)

      //   yyyy-mm-dd
      var y = dt.getFullYear()
      var m = dt.getMonth() + 1
      var d = dt.getDate()

      // return y + '-' + m + '-' + d



      if (pattern.toLowerCase() === 'yyyy-mm-dd') {
        return `${y}-${m}-${d}`
      } else {
        var hh = dt.getHours()
        var mm = dt.getMinutes()
        var ss = dt.getSeconds()

        return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
      }
    })
// 自定義全局按鍵修飾符
    Vue.config.keyCodes.f2 = 113

Vue.directive() 定義全局的指令

 // 其中:參數1 : 指令的名稱,註意,在定義的時候,指令的名稱前面,不需要加 v- 首碼, 
    // 但是: 在調用的時候,必須 在指令名稱前 加上 v- 首碼來進行調用
    //  參數2: 是一個對象,這個對象身上,有一些指令相關的函數,這些函數可以在特定的階段,執行相關的操作
    Vue.directive('focus', {
      bind: function (el) { // 每當指令綁定到元素上的時候,會立即執行這個 bind 函數,只執行一次
        // 註意: 在每個 函數中,第一個參數,永遠是 el ,表示 被綁定了指令的那個元素,這個 el 參數,是一個原生的JS對象
        // 在元素 剛綁定了指令的時候,還沒有 插入到 DOM中去,這時候,調用 focus 方法沒有作用
        //  因為,一個元素,只有插入DOM之後,才能獲取焦點
        // el.focus()
      },
      inserted: function (el) {  // inserted 表示元素 插入到DOM中的時候,會執行 inserted 函數【觸發1次】
        el.focus()
        // 和JS行為有關的操作,最好在 inserted 中去執行,放置 JS行為不生效
      },
      updated: function (el) {  // 當VNode更新的時候,會執行 updated, 可能會觸發多次

      }
    })

自定義一個字體顏色的指令

 // 自定義一個 設置字體顏色的 指令
    Vue.directive('color', {
      // 樣式,只要通過指令綁定給了元素,不管這個元素有沒有被插入到頁面中去,這個元素肯定有了一個內聯的樣式
      // 將來元素肯定會顯示到頁面中,這時候,瀏覽器的渲染引擎必然會解析樣式,應用給這個元素
      bind: function (el, binding) {
        // el.style.color = 'red'
        // console.log(binding.name)
        // 和樣式相關的操作,一般都可以在 bind 執行

        // console.log(binding.value)
        // console.log(binding.expression)

        el.style.color = binding.value
      }
    })

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

-Advertisement-
Play Games
更多相關文章
  • 一、SQL基本概念: SQL 已經成為關係資料庫的標準語言,是一種資料庫查詢和程式設計語言,用 於存取數據以及查詢、更新和管理關係資料庫系統。 功能不僅僅是查詢,還包括數據定義、數據操縱和數據控制等於資料庫有關的 一系列功能。 四大功能:數據查詢、數據定義、數據操縱和數據控制。 1)嵌入式和動態 S ...
  • @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().i... ...
  • @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present.// getMenuInflater()... ...
  • 屬性介紹stretchColumns:列被拉伸shrinkColumns:列被收縮collapseColumns:列被隱藏舉例測試 ... ...
  • 一、資源 先提供資源。如果我弄錯了什麼,請以這些文檔為準: W3C文檔、IANA已登記的子標簽、BCP 47、RFC 5646。 二、格式簡介 先上一張圖片: 一個Language Tags,由①到⑦一共四個子標簽組成。有什麼盤算不清楚的,請參考資源部分提供的文檔。 三、各部分含義 ①languag ...
  • 實現輪播圖有很多方式,但是html的結構都是一樣的。本文使用了Jquery框架,Dom操作更加方便靈活 html部分: CSS代碼: JS代碼: 主要就是JS部分,需要定義一個變數通過li的索引來控製圖片輪播。這裡我使用的是Jquery自帶的動畫淡入淡出效果。當然也可以使用animate函數自定義動 ...
  • css背景 1. 背景顏色 banckground clor屬性定義元素的背景顏色 ~~~ background color:顏色值; ~~~ 一般情況下元素的背景顏色預設值是transparent(透明的) 2. 背景圖片 background image屬性描述了元素的背景圖像。實際開發常見於L ...
  • [TOC] 不知道這個小知識點用得多不多,曾經在書上看到過,所以有一些印象,前段時間順手寫出類似如下的代碼 斷點調試之後發現無論如何都不相等,方法parseInt()返回的結果確實是NaN,但是與右側的NaN比較返回的結果卻是false,這時候才突然想起來NaN有不等於自身的特性,所以簡單收集一下資 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...