2017-05-07 64 views
0

我正在使用vue.js构建事件管理应用程序。问题是我无法将列表组中的每个事件的值呈现给DOM。它只是将大括号表达式呈现给DOM。如何访问各种元素中的对象值以显示事件数据?

这里是JS的小提琴:

https://jsfiddle.net/ufy01L3q/2/

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>events Management</title> 
</head> 
<body> 

<!-- Latest compiled and minified CSS --> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 

<!-- Optional theme --> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 

<script src="https://unpkg.com/vue"></script> 

    <!-- navigation bar --> 
    <nav class="navbar navbar-default"> 
    <div class="container-fluid"> 
     <a class="navbar-brand"><i class = ""></i> events Management </a> 
    </div> 
    </nav> 

    <!-- main body of our application --> 
    <div class="container" id="events"> 

    <!-- add an event form --> 
    <div class="col-sm-6"> 
     <div class="panel panel-default"> 
     <div class="panel-heading"> 
      <h3>Add an Event</h3> 
     </div> 
     <div class="panel-body"> 
     <div class="form-group"> 
      <input class="form-control" placeholder="Event Name" v-model="event.name"> 
     </div> 

     <div class="form-group"> 
      <textarea class="form-control" placeholder="Event Description" v-model="event.description"></textarea> 
     </div> 

     <div class="form-group"> 
      <input type="date" class="form-control" placeholder="Date" v-model="event.date"> 
     </div> 

     <button class="btn btn-primary" v-on="click: addEvent">Submit</button> 
     </div> 

     </div> 
    </div> 

    <!-- show the events --> 
    <div class="col-sm-6"> 
     <div class="list-group"> 
     <a href="#" class="list-group-item" v-repeat="event in events"> 
      <h4 class="list-group-item-heading"> 
      <i class="glyphicon glyphicon-bullhorn"></i> 
      {{ event.name }} 
      </h4> 

      <h5> 
      <i class="glyphicon glyphicon-calendar" v-if="event.date"></i> 
      {{ event.date }} 
      </h5> 

      <p class="list-group-item-text" v-if="event.description">{{ event.description }}</p> 

      <button class="btn btn-xs btn-danger" v-on="click: deleteEvent($index)">Delete</button> 
     </a> 

     </div> 
    </div> 
    </div> 




// app.js 

    <script> 
    new Vue({ 

     // We want to target the div with an id of 'events' 
     el: '#events', 

     // Here we can register any values or collections that hold data 
     // for the application 
     data: { 
      event: { 
       name: '', 
       description: '', 
       date: '' 
      }, 
      events: [] 
     }, 

     // Anything within the ready function will run when the application loads 
     ready: function() { 
      // When the application loads, we want to call the method that initializes 
      // some data 
      this.fetchEvents(); 
     }, 

     // Methods we want to use in our application are registered here 
     methods: { 
      // We dedicate a method to retrieving and setting some data 
      fetchEvents: function() { 
       var events = [{ 
         id: 1, 
         name: 'TIFF', 
         description: 'Toronto International Film Festival', 
         date: '2015-09-10' 
        }, 
        { 
         id: 2, 
         name: 'The Martian Premiere', 
         description: 'The Martian comes to theatres.', 
         date: '2015-10-02' 
        }, 
        { 
         id: 3, 
         name: 'SXSW', 
         description: 'Music, film and interactive festival in Austin, TX.', 
         date: '2016-03-11' 
        } 
       ]; 
       // $set is a convenience method provided by Vue that is similar to pushing 
       // data onto an array 
       this.$set('events', events); 
      }, 

      // Adds an event to the existing events array 
      addEvent: function() { 
       if (this.event.name) { 
        this.events.push(this.event); 
        this.event = { 
         name: '', 
         description: '', 
         date: '' 
        }, 
       } 
      } 
     } 
    }); 
    </script> 
</body> 
</html> 
    <!-- JS --> 

预先感谢您的帮助。

回答

0

第一:你没有正确包括Vue。将它包含在<head>之内,并且在jsfiddle中只包含一个脚本url,不包含标签。

二:你的事件绑定语法是错误的:你想v-on="click: addEvent",但正确的语法v-on:click="addEvent($event)" - 在这个例子中,你也传递$event到你的方法,你的提取物像这样的值:$event.target.value