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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...