<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 計算屬性computed如何傳參 # 【vue】計算屬性computed如何傳參 #### 前言 使用計算屬性可以讓模板內不需要放太多的計算邏輯,使得模板簡單維護性強。那么如果希望使用計算屬性傳入一個參數時該怎么寫呢? #### 正文 比如下面的數據,希望循環輸出時將`type`的值進行轉化,得到具體的用戶類型(`1代表學生,2代表老師`) ``` <pre class="calibre13">``` data<span class="token1">:</span> <span class="token1">{</span> userlist<span class="token1">:</span><span class="token1">[</span> <span class="token1">{</span> name<span class="token1">:</span><span class="token4">'張三'</span><span class="token1">,</span> type<span class="token1">:</span><span class="token5">1</span> <span class="token1">}</span><span class="token1">,</span> <span class="token1">{</span> name<span class="token1">:</span><span class="token4">'王二'</span><span class="token1">,</span> type<span class="token1">:</span><span class="token5">2</span> <span class="token1">}</span> <span class="token1">]</span> <span class="token1">}</span><span class="token1">,</span> ``` ``` 如果直接按如下方式給計算屬性傳參是不行的 ``` <pre class="calibre13">``` <span class="token5"><span class="token5"><span class="token1"><</span>ul</span><span class="token1">></span></span> <span class="token5"><span class="token5"><span class="token1"><</span>li</span> <span class="token4">v-for</span><span class="token2"><span class="token1">=</span><span class="token1">"</span>item,index in userlist<span class="token1">"</span></span><span class="token1">></span></span> <span class="token5"><span class="token5"><span class="token1"><</span>span</span><span class="token1">></span></span>{{item.name}}<span class="token5"><span class="token5"><span class="token1"></</span>span</span><span class="token1">></span></span> <span class="token5"><span class="token5"><span class="token1"><</span>span</span><span class="token1">></span></span>{{usertype(item.type)}}<span class="token5"><span class="token5"><span class="token1"></</span>span</span><span class="token1">></span></span> <span class="token5"><span class="token5"><span class="token1"></</span>li</span><span class="token1">></span></span> <span class="token5"><span class="token5"><span class="token1"></</span>ul</span><span class="token1">></span></span> ``` ``` ``` <pre class="calibre13">``` computed<span class="token1">:</span> <span class="token1">{</span> <span class="token3">usertype</span><span class="token1">(</span>value<span class="token1">)</span><span class="token1">{</span> <span class="token2">var</span> user <span class="token">=</span> <span class="token4">''</span> <span class="token2">return</span> value <span class="token">===</span> <span class="token5">1</span> <span class="token">?</span> user <span class="token">=</span> <span class="token4">'學生'</span> <span class="token1">:</span> user <span class="token">=</span> <span class="token4">'老師'</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` 結果會報錯:`usertype is not a function` **原因** 上圖調用計算屬性的代碼是`usertype(item.type)`,而我們不去傳參時是這樣調用的`usertype`。說明`usertype`調用了計算屬性得到計算屬性的`返回值`,然后再執行`返回值(item.type)`,但是這里`返回值`并不是函數無法執行,所以報錯:`usertype is not a function`。那么只需要讓計算屬性`返回一個函數`即可。 **采用閉包的形式**: ``` <pre class="calibre13">``` computed<span class="token1">:</span> <span class="token1">{</span> <span class="token3">usertype</span><span class="token1">(</span><span class="token1">)</span><span class="token1">{</span> <span class="token2">return</span> <span class="token2">function</span> <span class="token1">(</span>value<span class="token1">)</span><span class="token1">{</span> <span class="token2">var</span> user <span class="token">=</span> <span class="token4">''</span> value <span class="token">===</span> <span class="token5">1</span> <span class="token">?</span> user <span class="token">=</span> <span class="token4">'學生'</span> <span class="token1">:</span> user <span class="token">=</span> <span class="token4">'老師'</span> <span class="token2">return</span> user <span class="token1">}</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` > 這里采用閉包,計算屬性返回一個匿名函數,然后執行這個匿名函數并傳入參數,將判斷結果返回 #### 注意:傳參之后結果還會緩存嗎? **計算屬性的好處:** 我們都知道使用計算屬性除了使得模板內容里邏輯簡單,便于維護。還有一個最重要的好處,那就是`緩存結果`。這也就是明明我們在`methods`里定義同樣的方法函數可以與`computed`得到同樣的結果,卻不用`methods`的原因。 > - 每次調用`methods`里的函數都要去重新執行,試想一下如果一個函數的邏輯過于復雜,那么每次調用的性能消耗都是巨大的。 > - 而`computed`會將第一次執行的結果緩存,以后每一次調用時都是直接讀取緩存結果而不是執行。 > - `計算屬性是基于它們的響應式依賴進行緩存`,只有相關的依賴發送改變才會重新求值 **測試:** 同時測試一下傳參和不傳參,看看它們的結果 代碼: ``` <pre class="calibre13">``` <span class="token5"><span class="token5"><span class="token1"><</span>p</span><span class="token1">></span></span>{{time1('傳參:')}}<span class="token5"><span class="token5"><span class="token1"></</span>p</span><span class="token1">></span></span> <span class="token5"><span class="token5"><span class="token1"><</span>p</span><span class="token1">></span></span>{{time1('傳參:')}}<span class="token5"><span class="token5"><span class="token1"></</span>p</span><span class="token1">></span></span> <span class="token5"><span class="token5"><span class="token1"><</span>p</span><span class="token1">></span></span>不傳參:{{time2}}<span class="token5"><span class="token5"><span class="token1"></</span>p</span><span class="token1">></span></span> <span class="token5"><span class="token5"><span class="token1"><</span>p</span><span class="token1">></span></span>不傳參:{{time2}}<span class="token5"><span class="token5"><span class="token1"></</span>p</span><span class="token1">></span></span> ``` ``` ``` <pre class="calibre13">``` computed<span class="token1">:</span> <span class="token1">{</span> <span class="token3">time1</span><span class="token1">(</span><span class="token1">)</span><span class="token1">{</span> <span class="token2">return</span> <span class="token2">function</span> <span class="token1">(</span>value<span class="token1">)</span><span class="token1">{</span> <span class="token2">return</span> value<span class="token">+</span>Date<span class="token1">.</span><span class="token3">now</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">}</span> <span class="token1">}</span><span class="token1">,</span> <span class="token3">time2</span><span class="token1">(</span><span class="token1">)</span><span class="token1">{</span> <span class="token2">return</span> Date<span class="token1">.</span><span class="token3">now</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` 代碼說明:定義兩個計算屬性,`time1`傳參`time2`不傳參,分別執行兩次計算屬性。觀察結果: ![](https://img-blog.csdnimg.cn/20200326020627660.PNG) 結果說明:很明顯,傳參的計算屬性結果并沒有緩存,而是重新進行了計算 > 注意:可能你會得到兩次傳參的計算屬性結果一致,那是因為恰好兩次計算屬性同時執行,多刷新幾次 沒有傳參的計算屬性返回的是最終的計算結果,而通過閉包傳參之后返回的是一個函數,這個函數執行之后再得到結果,那么這個和使用`methods`仿佛已經沒了區別。可以說,傳參之后的計算屬性已經不能稱為計算屬性,它甚至不能緩存數據,而使用計算屬性的目的之一,就是緩存數據。 #### 總結 說到這里,雖然計算屬性可以通過閉包進行傳參,但它已經違背了計算屬性,所以使用計算屬性傳參不如使用`methods`。或許這也是為什么官方文檔并沒有提出計算屬性傳參的的內容吧!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看