在 vue js 中将函数作为 props 传递

kha*_*hah 7 vue-router vue-component vuex vuejs2 vue-props

我试图将 editTodo 作为 props 函数从父 app.vue 传递到子组件... TodoItem.vue 组件有一个项目列表,时间返回到 newTodo 和 dateTime 字段的主要用户输入。实际上,我是 Vue js 的新学习者,对组件通信的传递 props 有一点了解。

      <template>
  <div id="app" class="container">
    <TodoInput :addTodo="addTodo"
    :updateTodo="updateTodo" 
    
    />

    <todo-item v-for="(todo, index) in todos" 
    :key=todo.id 
    :todo=todo 
    :index =index 
    :removeTodo="removeTodo"
    :editTodo="editTodo" /> 
    
  </div>

  
 
</template>



<script>
import TodoInput from "./components/TodoInput.vue";
import TodoItem from "./components/TodoItem.vue";
 
export default {
  name: "App",
  components: {
    TodoInput,
    TodoItem,
  
  },
  data() {
    return {
     
      editing:false,
      editItems:{},
      
      
      todos: [
        // {
        //   id: 1,
        //   title: "",
        //   date: new Date(),
        //   editing: false,
        //   completed: false,
        // },
        // {
        //   id: 1,
        //   title: "",
        //   date: new Date(),
        //   editing: false,
        //   completed: false,
        // },
      ],
    };
  },
 

  methods: {
     editTodo(index, newTodo, dateTime){
     , ' dateTime ', dateTime)
    //  this.editItems = {
    //    id,
    //    title,
    //    time,
    //  }
      this.todo = newTodo
      this.todo = dateTime
      this.selectedIndex = index
      this.editing = true
    },
Run Code Online (Sandbox Code Playgroud)

TodoItem.vue 组件有一个项目列表和时间返回到 newTodo 和 dateTime 字段的主用户输入。***enter code here

  • ``**

    --> {{todo.title}} {{todo.time}}
    </div>
          <div class="remove-item" @click="removeTodo(index)">
              &times; 
          </div>
           <div class="edit-item"  @click="eiditTodo(index)"
           >
              <i class="fas fa-edit" id="edit"></i>
           </div>
    
    Run Code Online (Sandbox Code Playgroud)

导出默认值 { name: 'todo-item', props:{ todo:{ type: Object, required: true, }, removeTodo:{ type:Function, required:true, }, index:{ type:Number, required: true , },

},
data(){
    return{
        'id': this.todo.id,
        'title': this.todo.newTodo,
        'time': this.todo.dateTime,
      }

methods: 
   
    getEdit(){
     
        this.$emit('editTodo', this.selectedIndex)
    }
Run Code Online (Sandbox Code Playgroud)

**`

小智 12

您应该从子组件发出一个事件并在父组件中执行该函数,而不是将函数作为 prop 传递给子组件来运行它。

从子组件发出事件

@click="$emit('edit-todo')"
Run Code Online (Sandbox Code Playgroud)

然后在父组件中

<div @edit-todo="editTodo">
</div>
Run Code Online (Sandbox Code Playgroud)

editTodo或者,您可以在组件中定义函数TodoItem并直接调用它。

  • @basickarl不,他们不会,因为您在每个组件中指定了 edit-todo 的内容 `&lt;SomeComponent @edit-todo='someFunction()'&gt;` 和 `&lt;SomeComponent @edit-todo='someOtherFunction()'&gt;` (2认同)