Я сталкиваюсь с проблемой, когда вызываются все мои экземпляры VueJS, даже если элемент отсутствует на странице.
У меня есть mixin, объявленный таким образом.
var mixin = {
methods: {
listEvents(parameters) {
return axios.get('/api/v1/events', {params: parameters})
},
listLocations(parameters) {
return axios.get('/api/v1/locations', {params: parameters})
},
}
}
И несколько экземпляров, которые используют это смешивание. Если вы спросите, почему несколько экземпляров, это потому, что я использую VuejS на нескольких страницах. Например, у меня есть страница, на которой перечислены события и страница, на которой указаны местоположения. Итак, все мои методы находятся в mixin, а затем экземпляр, созданный для страницы, вызывается, потому что страница содержит элемент, указанный в экземпляре (например: id = "location" и el: "#locations")
Пример одного экземпляра:
// Vue
new Vue({
el: '#locations',
delimiters: ['[[', ']]'],
mixins: [mixin],
data: {
locations: [],
loading: true,
error: false,
page: 1,
perPage: 20,
},
mounted: function () {
console.log("VUEJS 'locations' has been mounted")
this.init();
},
methods: {
init() {
...
...
Но, независимо от того, на какой странице я нахожусь, все экземпляры вызываются... Я вижу все вызовы API, инициируются карты листовки, но контейнера нет... это беспорядок.
Я что-то пропустил или понял?
EDIT: Я могу добавить, что все экземпляры находятся в app.js
и этот app.js
включен во все страницы.
Похоже, у вас есть сценарий, который загружается на каждую страницу, создавая новые объекты Vue, независимо от того, отображаются ли элементы, связанные с Vues.
Vue создаст экземпляры, даже если элемент, который вы его создаете, не существует.
В этом случае вы можете просто проверить, существуют ли элементы до создания Vue.
const locations = document.querySelector("#locations")
if (locations) {
new Vue({
el: "#locations",
...
})
}
new Vue();
Вы создаете экземпляр Vue.init
вmounted
. Насколько мне известно,mounted
не должен вызываться, если корневого HTML-элемента не существует на странице.