Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js 来自子组件的事件为';检测不到_Vue.js_Vuejs2_Vue Component - Fatal编程技术网

Vue.js 来自子组件的事件为';检测不到

Vue.js 来自子组件的事件为';检测不到,vue.js,vuejs2,vue-component,Vue.js,Vuejs2,Vue Component,基于Vue上的树视图示例(),我将其代码重新组织如下: 在父组件中 <ul> <item class="item" :model="treeData" v-on:changeType="changeTypeEvent"></item> </ul> ... <script> ... methods: { changeTypeEvent: function () { console.log

基于Vue上的树视图示例(),我将其代码重新组织如下: 在父组件中

<ul>
      <item class="item" :model="treeData" v-on:changeType="changeTypeEvent"></item>
</ul>
...
<script>
  ...
    methods: {
       changeTypeEvent: function () {
       console.log('Incoming event ' )
    }
 ...
</script>
... ... 方法:{ changeTypeEvent:函数(){ console.log('传入事件') } ...
在其子组件中

<li>
  <div :class="{bold: isFolder}" @click="toggle" @dblclick.once="changeType">
        {{model.name}}
    <span v-if="isFolder">[{{open ? '-' : '+'}}]</span>
  </div>
  <ul v-show="open" v-if="isFolder">
    <item class="item" v-for="model in model.children" v-bind:key="model.name" :model="model">
        </item>
    <li class="add" @click="addChild">+</li>
  </ul>
  </li>
  ...
<script>
export default {
  name: 'item',
  props: {
    model: Object
  },
  data: function () {
    return {
      open: false
    }
  },
  computed: {
    isFolder: function () {
      return this.model.children &&
       this.model.children.length
    }
  },
  methods: {
    toggle: function () {
      if (this.isFolder) {
        this.open = !this.open
      }
    },
   changeType: function () {
    if (!this.isFolder) {
      console.log('Double click ' + this.model.name)
      this.$emit('changeType')
    }
  },
 }
}
</script>
  • {{model.name} [{{打开?'-':'+'}}]
    • +
  • ... 导出默认值{ 名称:'项目', 道具:{ 模型:对象 }, 数据:函数(){ 返回{ 开放:假 } }, 计算:{ isFolder:函数(){ 返回此.model.children&& 这个。模型。儿童。长度 } }, 方法:{ 切换:函数(){ if(此.isFolder){ this.open=!this.open } }, changeType:函数(){ 如果(!this.isFolder){ console.log('双击'+this.model.name) 此.$emit('changeType') } }, } }

    由于某些原因,在父组件中未检测到该事件。我有一个具有相同结构的工作代码。为什么在这种情况下不工作?

    Html属性名称不区分大小写()因此,Vue将父级上的事件侦听器从pascal case
    changeType
    转换为模板的kebab case
    change type

    <ul>
          <item class="item" :model="treeData" v-on:change-type="changeTypeEvent"></item>
    </ul>
    

    Vue文档:

    请共享子组件的代码:)您是否尝试为您的事件使用其他名称?@Franzskufka我没有更改子组件代码,只是将v-on:changeType切换为v-on:changeType谢谢您提供的信息。我尝试在不使用任何大写字母的情况下重命名事件。问题仍然存在。我有一个看看我的另一个模式实现。事件名称包含一个大写字母。在父级中,它不在烤肉串中。这是有效的。我将用更多详细信息更新我的问题。请提供更多代码。请注意,您只能侦听来自直接子组件的事件。孙子不能触发事件。