0

I am trying to build vue js applications but I am getting following errors .

Severity Code Description Project File Line Suppression State Warning TS1005 (JS) ':' expected. VuejsApp JavaScript Content Files C:\Users\Khundokar Nirjor\Documents\Visual Studio 2017\Projects\VuejsApp\VuejsApp\src\App.vue 19 Active

This is Home.vue code

<template>
    <div id="databinding">
        <div id="counter-event-example">
            <p style="font-size:25px;">Language displayed : <b>{{ languageclicked }}</b></p>
            <button-counter v-for="(item, index) in languages"
                            v-bind:item="item"
                            v-bind:index="index"
                            v-on:showlanguage="languagedisp"></button-counter>
        </div>
    </div>
</template>

<script>
   // import Home from './components/Home.vue';
  //  import component1 from './components/component1.vue';

    export default {
        name: 'app',
        Vue.components('button-counter', {
            template: '<button v-on:click = "displayLanguage(item)"><span style = "font-size:25px;">{{ item }}</span></button>',
            data: function () {
                return {
                    counter: 0
                }
            },
            props: ['item'],
            methods: {
                displayLanguage: function (lng) {
                    console.log(lng);
                    this.$emit('showlanguage', lng);
                }
            },
        });
         new Vue({
            el: '#databinding',
            data: {
                languageclicked: "",
                languages: ["Java", "PHP", "C++", "C", "Javascript", "C#", "Python", "HTML"]
            },
            methods: {
                languagedisp: function (a) {
                    this.languageclicked = a;
                }
            }
        })
    };


</script>

<style>
</style>

I want to display list of buttons and when i clicked the any of them button , I want to display the message that button is clicked.

1 Answer 1

0

I believe your error is related to the component. First, the function name is wrong. The correct name is Vue.component and it is Vue.components. Second, your component declaration is not correct.

I created this codepen where you can see how to declare the component globally and locally.

const buttonCounter = {
	template:
		`<button @click="displayLanguage(item)">
			<span style="font-size:25px;">{{ item }}</span>
		</button>`,
	props: ["item"],
	methods: {
		displayLanguage: function(lng) {
			this.$emit("show-language", lng);
		}
	}
}


// Declare your component globally, will be able to access it in any another component in the application
Vue.component("button-counter", buttonCounter );

new Vue({
	el: "#databinding",
  // declarete your component locally, it only will be available inside this context
	components:{
		'button-counter-2' : buttonCounter
	},
	data: function() {
		return {
			languageclicked: "",
			languages: ["Java", "PHP", "C++", "C", "Javascript", "C#", "Python", "HTML"]
		};
	},
	methods: {
		languageDisp: function(a) {
			this.languageclicked = a;
		}
	}
});
body {
	margin: 20px;
}

.btn-wrapper {
		display: flex;
		margin-bottom: 20px;
	}
	
	
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="databinding">
	<div id="counter-event-example">
		<p style="font-size:25px;">Language displayed : <b>{{ languageclicked }}</b></p>
		<div class="btn-wrapper">
			<button-counter v-for="(item, index) in languages" :item="item"  :key="item" @show-language="languageDisp"/>
		</div>
		<button-counter-2 v-for="(item, index) in languages" :item="item" :key="item"  @show-language="languageDisp"/>
	</div>
</div>

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.