Je suis nouveau à la vue js. Je crée juste un projet simple dans lequel je viens d’ajouter vuejs via CDN. ne pas utiliser node/npm ou cli.
Je garde tout mon balisage HTML en HTML simple, qui a l'air malpropre à mesure qu'il grandit. J'ai essayé de scinder le html en vues et je voulais l'inclure avec quelque chose d'analogue à ng-include
of angularJs
J'ai travaillé précédemment dans angular où il y a ng-include
pour charger des fichiers HTML externes. Je cherche quelque chose de semblable à cela en vue. le but est de scinder mes fichiers html en plusieurs fichiers distincts maintenables.
ont rencontré <template src="./myfile.html"/>
mais cela ne fonctionne pas Quelqu'un peut-il m'aider?
Vous ne pouvez pas. Vous devez utiliser des composants asynchrones - lisez le guide ici
C'est en fait remarquablement facile, mais vous devez garder quelque chose à l'esprit. Dans les coulisses, Vue convertit votre balise de modèle HTML en code. Autrement dit, chaque élément défini en HTML est converti en une directive javascript pour créer un élément. Le gabarit est pratique, vous ne pouvez donc pas utiliser le composant à fichier unique (fichier vue) sans compiler avec quelque chose comme webpack. Au lieu de cela, vous devrez utiliser un autre moyen de créer des modèles. Heureusement, il existe d'autres moyens de définir des modèles qui ne nécessitent pas de pré-compilation et qui sont utilisables dans ce scénario.
exemple: template: '<div>{{myvar}}</div>'
exemple: render(create){create('div')}
Vue a plusieurs autres façons de créer des modèles, mais ils ne correspondent tout simplement pas aux critères.
voici l'exemple pour les deux:
AddItem.js - utilisation du rendu ???? les fonctions
'use strict';
Vue.component('add-item', {
methods: {
add() {
this.$emit('add', this.value);
this.value = ''
}
},
data () {
return {
value: ''
}
},
render(createElement) {
var self = this
return createElement('div', [
createElement('input', {
attrs: {
type: 'text',
placeholder: 'new Item'
},
// v-model functionality has to be implemented manually
domProps: {
value: self.value
},
on: {
input: function (event) {
self.value = event.target.value
// self.$emit('input', event.target.value)
}
}
}),
createElement('input', {
attrs: {
type: 'submit',
value: 'add'
},
on: {
click: this.add
}
}),
])
}
});
ListItem.js - utilisation de littéraux de modèle (ticks arrière)
'use strict';
Vue.component('list-item', {
template: `<div class="checkbox-wrapper" @click="check">
<h1>{{checked ? '☑' : '☐'}} {{ title }}</h1>
</div>`,
props: [
'title',
'checked'
],
methods: {
check() {
this.$emit('change', !this.checked);
}
}
});
et le html
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.0/vue.js"></script>
<script src="ListItem.js"></script>
<script src="AddItem.js"></script>
</head>
<body>
<div id="app">
<add-item @add='list.Push({title:arguments[0], checked: false})'></add-item>
<list-item v-for="(l, i) in list" :key="i" :title="l.title" :checked="l.checked" @change="l.checked=arguments[0]"></list-item>
</div>
<script type="text/javascript">
new Vue({
el: '#app',
data: {
newTitle: '',
list: [
{ title: 'A', checked: true },
{ title: 'B', checked: true },
{ title: 'C', checked: true }
]
}
});
</script>
</body>
</html>
ng-include
était vraiment génial pour le chargement des modèles pour le routeur. Une alternative consiste à utiliser fetch
et à mettre en œuvre votre propre promesse.