亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Vue 2中實(shí)現(xiàn)父子組件無限循環(huán)的方法:使用插槽
P粉128563140
P粉128563140 2023-09-03 15:13:47
0
1
690
<p>我需要從父組件中調(diào)用子組件的一個(gè)方法。然而,我在子組件中做的一些事情似乎導(dǎo)致了一個(gè)無限循環(huán)。我嘗試過查看其他問題,雖然它們似乎是在解決類似的問題,但我無法將它們的確切模式應(yīng)用到我面臨的問題上,它似乎是不同的。我只是不確定我在看什么。</p> <p>我有兩個(gè)組件,一個(gè)叫做ToggleButtons,另一個(gè)被簡(jiǎn)化為一個(gè)按鈕。這是ToggleButtons:</p> <pre class="brush:php;toolbar:false;"><template> <div role="list"> <div role="listitem"> <slot name="left" :is-selected="leftSelected" :toggleLeft="toggle('left')" /> </div> <div role="listitem"> <slot name="right" :is-selected="rightSelected" :toggleRight="toggle('right')" /> </div> </div> </模板> <腳本> 導(dǎo)出默認(rèn)值{ 道具: { 左選擇初始:{ 類型:布爾值, 默認(rèn)值:真, } }, 數(shù)據(jù)() { 返回 { 左選擇:真, 右選擇:假, } }, 之前安裝(){ this.leftSelected = this.leftSelectedInitially; this.rightSelected = !this.leftSelectedInitial; }, 方法: { 切換(覆蓋){ this.leftSelected = override == '左'; this.rightSelected = override == '右'; } } } </腳本></pre> <p>這就是它與按鈕的實(shí)現(xiàn):</p>

    <模板 v 槽:左=”{
        已選中,
    }>>
        <按鈕
            類=“按鈕”;
            :class="{ secondary: !isSelected }"
            :aria-pressed="isSelected"
            :togglable="true";
            v-text="'左'"
            @click=“切換('左')”
        >>
    </模板>
    <模板 v-slot:right="{
        已選中,
    }>>
        <按鈕
            類=“按鈕”;
            :class="{ secondary: !isSelected }"
            :aria-pressed="isSelected"
            :togglable="true";
            v-text="'右'";
            @click=“切換('右')”
        >>
    </模板>
</切換按鈕></pre>
<p>其中切換方法為:</p>
<pre class="brush:php;toolbar:false;">切換(方向){
    this.$refs.tb.toggle(方向);
},</pre>
<p>正如你可能已經(jīng)從代碼中看到的殘留物,我之前嘗試過各種模式,包括通過 v-slot 提交切換方法。所有這些都導(dǎo)致了相同的“你創(chuàng)建了一個(gè)無限循環(huán)”的消息。</p>
<p>我想知道是否因?yàn)樵摲椒ㄔ趪L試渲染時(shí)調(diào)用了切換。我不確定這是否會(huì)導(dǎo)致無限循環(huán)。我這里的主要問題是我不明白這個(gè)循環(huán)是從哪里來的。我目前的主要目標(biāo)是理解生長(zhǎng)什么問題,這樣如果再次發(fā)生,我就能看到它,即使修復(fù)方法只是找到一個(gè)更簡(jiǎn)單的方法。</p>            
P粉128563140
P粉128563140

全部回復(fù)(1)
P粉727531237

以下對(duì)toggle函數(shù)的綁定對(duì)我來說沒有任何意義:

:toggleLeft="toggle('left')"
:toggleRight="toggle('right')

由于該函數(shù)不返回任何值,所以這是錯(cuò)誤的。

這兩個(gè)綁定會(huì)導(dǎo)致函數(shù)無限調(diào)用toggle('left')toggle('right')

只需在toggle函數(shù)中添加console.log(direction)以查看發(fā)生了什么。

如果您想獲得關(guān)于正確解決方案的建議,請(qǐng)描述您想要實(shí)現(xiàn)的目標(biāo)。

Vue.component('toggle-buttons',{
  props: {
    leftSelectedInitially: {
        type: Boolean,
        default: true,
    }
  },
  data() {
      return {
          leftSelected: true,
          rightSelected: false,
      }
  },
  beforeMount() {
      //this.leftSelected = this.leftSelectedInitially;
      //this.rightSelected = !this.leftSelectedInitially;
  },
  methods: {
      toggle(override) {
          console.log(`override: ${override}`)
          this.leftSelected = override == 'left';
          this.rightSelected = override == 'right';
      }
  },
  template: `
<div role="list">
  <div role="listitem">
      <slot name="left" :is-selected="leftSelected" :toggleLeft="toggle('left')" />
  </div>
  <div role="listitem">
      <slot name="right" :is-selected="rightSelected" :toggleRight="toggle('right')" />
  </div>
</div>
`
});

new Vue({
  el:'#app',
  methods: {
  toggle(direction) {
    console.log(`direction: ${direction}`)
    this.$refs.tb.toggle(direction);
    }
  }
})
#app { line-height: 2; }
[v-cloak] { display: none; }
<div id="app">
<toggle-buttons ref="tb">
    <template v-slot:left="{ isSelected }">
        <button
            class="button"
            :class="{ secondary: !isSelected }"
            :aria-pressed="isSelected"
            :togglable="true"
            v-text="'left'"
            @click="toggle('left')"
        />
    </template>
    <template v-slot:right="{ isSelected }">
        <button
            class="button"
            :class="{ secondary: !isSelected }"
            :aria-pressed="isSelected"
            :togglable="true"
            v-text="'right'"
            @click="toggle('right')"
        />
    </template>
</toggle-buttons>
</div>
<script src="https://unpkg.com/vue@2/dist/vue.min.js"></script>
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板