import { buildData, startMeasure, stopMeasure } from "../shared/utils.js"; //------------------------------------------------------------------------------ // Counter Widget //------------------------------------------------------------------------------ Vue.component("likes-counter", { data: function() { return { counter: 0 }; }, methods: { increment() { this.counter++; } }, template: `
` }); //------------------------------------------------------------------------------ // Message Widget //------------------------------------------------------------------------------ Vue.component("my-message", { props: ["msg"], methods: { removeMessage() { this.$emit("removeMessage", this.msg.id); } }, template: `
{{msg.author}} {{msg.msg}}
` }); //------------------------------------------------------------------------------ // Root Widget //------------------------------------------------------------------------------ const App = { name: "App", data() { return { messages: [] }; }, methods: { addMessages(n) { startMeasure("add " + n); const newMessages = buildData(n); this.messages.push.apply(this.messages, newMessages); stopMeasure(); }, clear() { startMeasure("clear"); this.messages = []; stopMeasure(); }, updateSomeMessages() { startMeasure("update every 10th"); const messages = this.messages; for (let i = 0; i < this.messages.length; i += 10) { messages[i].author += "!!!"; } stopMeasure(); }, removeMessage(id) { startMeasure("remove message"); const index = this.messages.findIndex(m => m.id === id); this.messages.splice(index, 1); stopMeasure(); } }, template: `
Number of msg: {{messages.length}}
` }; //------------------------------------------------------------------------------ // Application initialization //------------------------------------------------------------------------------ new Vue({ render: h => h(App) }).$mount(`#main`);