<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      深入淺出Blazor webassembly之使用EventCallback機制進行組件之間聯動

      ===============================

      總體思路

      ===============================

      設想一個購物車的場景,對于購物車中的某個商品, 如果增加數量, 購物車總數量也要同步增加.

      使用CascadingValue組件就無法實現這個要求, CascadingValue組件只能實現從上層組件傳值到下層組件, 反向傳值是不行的.   EventCallback 因為有更高的靈活性, 能實現這樣的功能,

      總體思路:

      ⒈ 在事件源組件中定義一個 EventCallback<> 委托屬性, 并將這個屬性加上 Parameter 注解. 這是事件埋點, 關注該事件的其他組件必須注入一個Callback委托.

          需要說明的是Blazor的 EventCallback<> 是單播 single cast 事件,  而 .Net 事件是多播. 

         代碼示例:  [Parameter] public EventCallback<MouseEventArgs> OnNumberAdded{ get; set;}

      2. 在事件源組件的Trigger點, 進行委托調用

        代碼示例:  await OnNumberAdded.InvokeAsync(e)

      3. 在事件訂閱方組件中, 為事件源組件注入一個埋點事件委托.

        代碼示例: <ProductItemUI ProductItem="product" OnNumberAdded="OnNumberAddedHandler"/>

       

      ===============================

      完整示例:

      ===============================

      ProductItem Data對象代碼

      //===========================
      // file: Data\ProductItem.cs
      //===========================
      namespace blazorDemo1.Data
      {
          public class ProductItem
          {
              public string Title{get ;set ;}
              public int Quantity{get ;set ;}
          }
      }

       

      ProductItemUI 組件代碼, 在組件中增加埋點Parameter, 并觸發埋點委托

      @* //================================ *@
      @* // file: Shared\ProductItemUI.razor *@
      @* //================================= *@
      @using blazorDemo1.Data 
      
      <tr>
          <td>@ProductItem.Title</td>
          <td>@ProductItem.Quantity</td>
          <td>
              <button type="button" class="btn btn-success btn-sm" @onclick="AddNumber">Add 1</button>
          </td>
      </tr>
      @code{
          [Parameter] public ProductItem ProductItem {get ;set ;}
          [Parameter] public EventCallback<MouseEventArgs> OnNumberAdded{get ;set ;}
              public async Task AddNumber(MouseEventArgs e){
                  ProductItem.Quantity+=1 ;
                  await OnNumberAdded.InvokeAsync(e) ; //在加1完成后, 觸發埋點事件
              } 
      }

       

      Cart 購物車組件, 注入埋點委托

      @* //================================ *@
      @* // file: Pages\Cart.razor *@
      @* //================================= *@
      @page "/cart"
      @using blazorDemo1.Data
      
      <div class="row">
          <div class="col">
              <h3>Buy Item List</h3>
          </div>
          <div class="col">
              <h5 class="float-right"> Total Qty:@TotalQuantity</h5>
          </div>
      </div>
      <br>
      <table class="table">
          <tr>
              <th>Title</th>
              <th> Qty</th>
              <th></th>
          </tr>
          @foreach (var Product in Products)
          {
              <ProductItemUI ProductItem="@Product" OnNumberAdded="@OnNumberAddedHandler"></ProductItemUI>
          }
      </table>
      
      @code {
          public List<ProductItem> Products;
          public int TotalQuantity;
          protected override void OnInitialized()
          {
              Products = new List<ProductItem>(){
              new ProductItem(){Title="A", Quantity=10},
              new ProductItem(){Title="B", Quantity=20},
              new ProductItem(){Title="C", Quantity=30}
          };
              UpdateTotalQty();
          }
          void UpdateTotalQty()
          {
              TotalQuantity = Products.Sum(i => i.Quantity);
          }
      
          void OnNumberAddedHandler(MouseEventArgs e)
          {
              TotalQuantity = Products.Sum(i => i.Quantity);
          }
      }

       

      posted @ 2021-09-01 22:40  harrychinese  閱讀(678)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 九九热在线精品视频99| 波多结野衣一区二区三区| 亚洲另类丝袜综合网| 亚洲韩欧美第25集完整版| 亚洲av色精品一区二区| 18禁动漫一区二区三区| 国产无套粉嫩白浆在线| 亚洲中文字幕有综合久久| 亚洲人成小说网站色在线| 霍州市| 麻豆文化传媒精品一区观看| 亚洲人妻中文字幕一区| 泸西县| 精品人妻蜜臀一区二区三区| 熟妇人妻不卡中文字幕| 91福利视频一区二区| 亚洲精品无码成人A片九色播放| 日韩一区二区三区av在线| 欧美人人妻人人澡人人尤物| 国产日韩av免费无码一区二区三区| 亚洲a∨无码一区二区三区| 国产熟女老阿姨毛片看爽爽| 日本一区二区三区专线| 美女裸体黄网站18禁止免费下载| 延川县| 又大又粗欧美成人网站| 无码伊人久久大杳蕉中文无码| 成人免费无码大片A毛片抽搐色欲 成人啪精品视频网站午夜 | 高级艳妇交换俱乐部小说| 日本道不卡一二三区视频| 中文字幕在线精品人妻| 最新亚洲国产手机在线| 精品无码三级在线观看视频| 国产精品一码在线播放| 亚洲国产欧美不卡在线观看| 精品人妻少妇一区二区三区在线 | 亚洲欧美综合中文| 视频一区视频二区中文字幕 | 亚洲中文字幕国产精品 | 蜜臀av一区二区精品字幕| 中文字幕在线永久免费视频|