[Vue warn]: Öğe bulunamıyor


166

Vuejs kullanıyorum . Bu benim işaretlemem:

<body>
  <div id="main">
    <div id="mainActivity" v-component="{{currentActivity}}" class="activity"></div>
  </div>
</body>

Bu benim kodum:

var main = new Vue({
    el: '#main',
    data: {
        currentActivity: 'home'
    }
})
;

Sayfayı yüklediğimde şu uyarıyı alıyorum:

[Vue warn]: Cannot find element: #main

Neyi yanlış yapıyorum?


1
Bunu altbilgide mi başlıkta mı yapıyorsunuz?
Chris Baker

6
komut dosyanızı bir pencereye hazır işleyiciye taşıyın
Arun P Johny

2
sorun hazırdı. Bu vue bunu içermiyor aptal gibi görünüyor ...
dopatraman

Yanıtlar:


317

Sorunun hedef dom öğesi dom yüklenmeden önce yürütüldüğünü düşünüyorum ... bir nedeni komut dosyasını sayfanın başına veya div öğesinden önce yerleştirilen bir komut dosyası etiketi yerleştirmiş olabilir #main. Komut dosyası yürütüldüğünde, hedef öğeyi ve dolayısıyla hatayı bulamaz.

Bir çözüm, komut dosyanızı aşağıdaki gibi yükleme olayı işleyicisine yerleştirmektir

window.onload = function () {
    var main = new Vue({
        el: '#main',
        data: {
            currentActivity: 'home'
        }
    });
}

Başka bir sözdizimi

window.addEventListener('load', function () {
    //your script
})

4
hey teşekkürler, vue js neden yüklenmeli burada yorum için üzgünüm,
doktorda

9
Ayrıca belirtmek gerekirse, addEventListeneryöntem "teknik olarak" daha sürdürülebilir bir yaklaşımdır çünkü global window.onloadmülkiyeti geçersiz kılmaz .
joshwhatk

Webpack paket komut dosyasını <head></head>bölüme dahil etmek , bana hataya neden olan şeydi. Yüklenecek pencerenin beklenmesi çalışıyor.
Amin NAIRI

1
Konsolda DOM öğelerine başvurular içeren komut dosyası ifadelerinin DOM yüklenmeden önce değerlendirildiğine dair bir uyarı yok mu? Bunu uygulamak nasıl zor bir uyarı olabilir?
Tom Russell

70

Sorunu, 'script' öğesine 'defer' özelliğini ekleyerek çözdüm.


Ertelemenin herhangi bir yan etkisi var mı?
Mohammad Ali Akbari

1
Komut dosyası etiketinin deferözelliğinin nasıl çalıştığı hakkında daha fazla bilgiyi buradan edinebilirsiniz . Bu DOM ayrıştırılır sonrasına kadar JS kodu çalıştıran geciktirecek, ama önce pencere onloadolayı harekete geçirilir.
JrBaconCheez

51

Aynı hatayı alıyorum. çözüm, komut dosyası kodunu baş bölümünde değil, gövdenin sonundan önce koymaktır.


vücudun sonundan önce ama kafanın içinde değil mi? bu tam olarak ne anlama geliyor?
16:10

6
<script src = "index.js"> </script> </body>
li bing zhao

3
vue.js kodunuzu </body> önüne koyun, tarayıcılar önce gövde içeriğini yükler, ardından vue.js kodunu yükler, çalışır.
li bing zhao

1
Laravel ve beraberindeki laravel-mix'i kullanırken bu sorunla karşılaştı. Vücut yüklenmesinden sonra js yüklemesini taşımak.
john

24

Basit olan şey, komut dosyasını kapanış </body>etiketinizden hemen önce belgenin altına koymaktır :

<body>
   <div id="main">
      <div id="mainActivity" v-component="{{currentActivity}}" class="activity"></div>
   </div>
   <script src="app.js"></script>
</body>

app.js dosyası:

var main = new Vue({
    el: '#main',
    data: {
        currentActivity: 'home'
    }
});

0

Bunu iki şekilde çözebilirsiniz.

  1. CDN'yi html sayfasının sonuna yerleştirdiğinizden ve bundan sonra kendi komut dosyanızı yerleştirdiğinizden emin olun. Misal:
    <body>
      <div id="main">
        <div id="mainActivity" v-component="{{currentActivity}}" class="activity"></div>
      </div>
    </body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>
    <script src="js/app.js"></script>

başka bir JavaScript dosyasına veya html dosyasına yazdığınız aynı javascript kodunu koymanız gerekir.

  1. JavaScript dosyanızda window.onload işlevini kullanın .

0

Bence bazen aptalca hatalar bize bu hatayı verebilir.

<div id="#main"> <--- id with hashtag
    <div id="mainActivity" v-component="{{currentActivity}}" class="activity"></div>
</div>

için

<div id="main"> <--- id without hashtag
    <div id="mainActivity" v-component="{{currentActivity}}" class="activity"></div>
</div>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.