代码之家  ›  专栏  ›  技术社区  ›  Geoff_S

Vue,独立组件触发“非函数”消息

  •  0
  • Geoff_S  · 技术社区  · 4 年前

    setInputName 功能。我相信这是因为 tabs 组件,它构建在一个单独的组件和模板上,然后使用另一个组件/模板 tab 对于单个列表项选项卡。

    这里的问题是,当我单击列表项时,控制台会打印出 _vm.setInputName is not a function

        <tabs>
          <tab name="Activity" :selected="true">
            <div class="row notesInput" id="notesInput">
              <div class="col-lg-12">
                <div class="tabs">
                  <ul style="border-bottom:none !important; text-decoration:none">
                    <li v-on:click="setInputName('public')">Public</li>
                    <li v-on:click="setInputName('public')">Internal</li>
                  </ul>
                </div>
                <div>
                  <input type="text" v-bind:name="inputName">
                  <br>
                  Input name is: {{ inputName }}
                </div>
              </div>
            </div>
          </tab>
        </tabs>
    
        <script>
        Vue.component('tabs', {
          template: `
                <div>
                    <div class="tabs">
                      <ul>
                        <li v-for="tab in tabs" :class="{ 'is-active': tab.isActive }">
                            <a :href="tab.href" @click="selectTab(tab)">{{ tab.name }}</a>
                        </li>
                      </ul>
                    </div>
    
                    <div class="tabs-details">
                        <slot></slot>
                    </div>
                </div>
            `,
    
          data() {
            return { 
              tabs: [],
             };
          },
    
          created() {
    
            this.tabs = this.$children;
    
          },
          methods: {
    
            selectTab(selectedTab) {
              this.tabs.forEach(tab => {
                tab.isActive = tab.name == selectedTab.name;
              });
            } } });
    
        Vue.component('tab', {
    
          template: `
    
                <div v-show="isActive"><slot></slot></div>
    
            `,
    
          props: {
            name: { required: true },
            selected: { default: false } },
    
    
          data() {
    
            return {
              isActive: false,
            };
    
    
          },
    
          computed: {
    
            href() {
              return '#' + this.name.toLowerCase().replace(/ /g, '-');
          } },
    
          mounted() {
    
            this.isActive = this.selected;
    
          } });
    
    
        export default {
          components: {
            Multipane,
            MultipaneResizer,
          },
          data () {
                return {
                    inputName: '',
                }
          },
          computed: {
    
          },
          methods: {
    
          setInputName(str) {
            this.inputName = str;
          }
        };
        </script>
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   NaSir HuSSaiN    4 年前

    我认为问题是因为您正在从另一个组件调用函数。 但是你的功能在另一个功能中。如果您希望这样做,那么您应该扩展您的函数所在的组件,然后您可以使用它。