VueJS - Instâncias
Para começar com VueJS, precisamos criar a instância de Vue, que é chamada de root Vue Instance.
Sintaxe
var app = new Vue({
// options
})
Vejamos um exemplo para entender o que precisa ser parte do construtor Vue.
<html>
<head>
<title>VueJs Instance</title>
<script type = "text/javascript" src = "js/vue.js"></script>
</head>
<body>
<div id = "vue_det">
<h1>Firstname : {{firstname}}</h1>
<h1>Lastname : {{lastname}}</h1>
<h1>{{mydetails()}}</h1>
</div>
<script type = "text/javascript" src = "js/vue_instance.js"></script>
</body>
</html>
vue_instance.js
var vm = new Vue({
el: '#vue_det',
data: {
firstname : "Ria",
lastname : "Singh",
address : "Mumbai"
},
methods: {
mydetails : function() {
return "I am "+this.firstname +" "+ this.lastname;
}
}
})
Para Vue, existe um parâmetro chamado el. Leva o id do elemento DOM. No exemplo acima, temos o id#vue_det. É o id do elemento div, que está presente em .html.
<div id = "vue_det"></div>
Agora, tudo o que vamos fazer afetará o elemento div e nada fora dele.
A seguir, definimos o objeto de dados. Tem os valores primeiro nome, sobrenome e endereço.
O mesmo é atribuído dentro do div. Por exemplo,
<div id = "vue_det">
<h1>Firstname : {{firstname}}</h1>
<h1>Lastname : {{lastname}}</h1>
</div>
O valor do Nome: {{nome}} será substituído dentro da interpolação, ou seja, {{}} pelo valor atribuído no objeto de dados, ou seja, Ria. O mesmo vale para o sobrenome.
Em seguida, temos métodos onde definimos uma função mydetails e um valor de retorno. É atribuído dentro do div como
<h1>{{mydetails()}}</h1>
Portanto, dentro de {{}} a função mydetails é chamada. O valor retornado na instância Vue será impresso dentro de {{}}. Verifique a saída para referência.
Resultado
Agora, precisamos passar opções para o construtor Vue que são principalmente dados, template, elemento para montar, métodos, callbacks, etc.
Vamos dar uma olhada nas opções a serem repassadas ao Vue.
#data- Este tipo de dado pode ser um objeto ou uma função. O Vue converte suas propriedades em getters / setters para torná-lo reativo.
Vamos dar uma olhada em como os dados são passados nas opções.
Exemplo
<html>
<head>
<title>VueJs Introduction</title>
<script type = "text/javascript" src = "js/vue.js"></script>
</head>
<body>
<script type = "text/javascript">
var _obj = { fname: "Raj", lname: "Singh"}
// direct instance creation
var vm = new Vue({
data: _obj
});
console.log(vm.fname);
console.log(vm.$data);
console.log(vm.$data.fname);
</script>
</body>
</html>
Resultado
console.log(vm.fname); // imprime Raj
console.log(vm.$data); imprime o objeto completo como mostrado acima
console.log(vm.$data.fname); // imprime Raj
Se houver um componente, o objeto de dados deve ser referido a partir de uma função, conforme mostrado no código a seguir.
<html>
<head>
<title>VueJs Introduction</title>
<script type = "text/javascript" src = "js/vue.js"></script>
</head>
<body>
<script type = "text/javascript">
var _obj = { fname: "Raj", lname: "Singh"};
// direct instance creation
var vm = new Vue({
data: _obj
});
console.log(vm.fname);
console.log(vm.$data);
console.log(vm.$data.fname);
// must use function when in Vue.extend()
var Component = Vue.extend({
data: function () {
return _obj
}
});
var myComponentInstance = new Component();
console.log(myComponentInstance.lname);
console.log(myComponentInstance.$data);
</script>
</body>
</html>
No caso de um componente, os dados são uma função, que é usada com Vue.extend conforme mostrado acima. Os dados são uma função. Por exemplo,
data: function () {
return _obj
}
Para referir-se aos dados do componente, precisamos criar uma instância dele. Por exemplo,
var myComponentInstance = new Component();
Para obter os detalhes dos dados, precisamos fazer o mesmo que fizemos com o componente pai acima. Por exemplo.
console.log(myComponentInstance.lname);
console.log(myComponentInstance.$data);
A seguir estão os detalhes exibidos no navegador.
Props- O tipo de adereços é uma matriz de string ou objeto. Requer uma sintaxe baseada em array ou em objetos. Eles são considerados atributos usados para aceitar dados do componente pai.
Exemplo 1
Vue.component('props-demo-simple', {
props: ['size', 'myMessage']
})
Exemplo 2
Vue.component('props-demo-advanced', {
props: {
// just type check
height: Number,
// type check plus other validations
age: {
type: Number,
default: 0,
required: true,
validator: function (value) {
return value >= 0
}
}
}
})
propsData - Isso é usado para teste de unidade.
Type- array de string. Por exemplo, {[chave: string]: qualquer}. Ele precisa ser passado durante a criação da instância Vue.
Exemplo
var Comp = Vue.extend({
props: ['msg'],
template: '<div>{{ msg }}</div>'
})
var vm = new Comp({
propsData: {
msg: 'hello'
}
})
Computed- Tipo: {[tecla: string]: Função | {get: Function, set: Function}}
Exemplo
<html>
<head>
<title>VueJs Introduction</title>
<script type = "text/javascript" src = "js/vue.js"></script>
</head>
<body>
<script type = "text/javascript">
var vm = new Vue({
data: { a: 2 },
computed: {
// get only, just need a function
aSum: function () {
return this.a + 2;
},
// both get and set
aSquare: {
get: function () {
return this.a*this.a;
},
set: function (v) {
this.a = v*2;
}
}
}
})
console.log(vm.aSquare); // -> 4
vm.aSquare = 3;
console.log(vm.a); // -> 6
console.log(vm.aSum); // -> 8
</script>
</body>
</html>
Computado tem duas funções aSum e aSquare.
A função aSum apenas retorna this.a+2. Função aSquare novamente duas funçõesget e set.
A variável vm é uma instância de Vue e chama aSquare e aSum. Além disso, vm.aSquare = 3 chama a função set de aSquare e vm.aSquare chama a função get. Podemos verificar a saída no navegador que se parece com a imagem a seguir.
Methods- Os métodos devem ser incluídos com a instância Vue, conforme mostrado no código a seguir. Podemos acessar a função usando o objeto Vue.
<html>
<head>
<title>VueJs Introduction</title>
<script type = "text/javascript" src = "js/vue.js"></script>
</head>
<body>
<script type = "text/javascript">
var vm = new Vue({
data: { a: 5 },
methods: {
asquare: function () {
this.a *= this.a;
}
}
})
vm.asquare();
console.log(vm.a); // 25
</script>
</body>
</html>
Os métodos fazem parte do construtor Vue. Vamos fazer uma chamada para o método usando o objeto Vuevm.asquare (), o valor da propriedade a é atualizado no asquarefunção. O valor de a é alterado de 1 para 25 e o mesmo é visto refletido no console do navegador a seguir.