Como incluir um CDN para VueJS CLI sem NPM ou Webpack?
ao trabalhar com soluções padrão de HTML, CSS & JS, incluiria CDNs como este:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>False Merge</title>
<!-- CDN -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.css"/>
<!-- StyleSheets -->
<link rel="stylesheet" href="public/stylesheets/index.css" />
</head>
<body>
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js"></script>
<script src="public/javascripts/index.js"></script>
</body>
</html>
Como pode ver, você pode adicionar um script CDN com a marca de script HTML, e começar a usá-lo no JS.
Estou a tentar fazer o mesmo com o VueJS num componente. Tenho o modelo e o estilo secções prontas.infelizmente, não sei como adicionar de uma forma simples um CDN para usar imediatamente na etiqueta de script dentro do componente Vue. Tentei fazer isto, mas não está a resultar.
<template>
<div class="index">
<div class="container">
<table id="table_dataset" class="display">
</table>
</div>
</div>
</template>
<script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js"></script>
<script>
export default {
name: 'Index',
data() {
return {
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
Existe uma maneira de adicionar um CDN (sem Webpack ou NPM) a um componente VueJS?
2 answers
Infelizmente, não, você não pode adicionar uma marca <script>
a um componente específico via template .
No seu caso, tem algumas opções:
1: Utilizar NPM
Instale apropriadamente a dependência usando npm
- Prós: o uso correto do NPM e Webpack; definição de escopo;
- Cons: o script deve estar disponível como um pacote NPM.
- nota: quando disponível, esta é a recomendado aproximem-se.
-
Passos:
-
Para o seu caso, Você pode verificar na página oficial
datatables
eles têm um pacote NPM. Eu poderia ser usado como:npm install --save datatables.net-dt
-
E no teu .vue ficheiro:
<script> require( 'datatables.net-dt' )(); export default { name: 'Index', data() { return { } } } </script>
-
2: Adicionar <script>
marca a index.html
Localizar e dd a marca <script>
para o seu index.html
-
prós: a etiqueta
<script>
está claramente (e declarativamente) adicionado ao código HTML. O script só será carregado uma vez. - Cons: o script será carregado globalmente.
- passos:
- basta adicionar o
<script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js"></script>
ao fim do ficheiroindex.html
, de preferência mesmo antes de</body>
.
- basta adicionar o
3: Criar a marca <script>
programaticamente
A outra alternativa é criar a marca script
programaticamente no componente, quando o componente é exausto.
- prós: o código fica apenas no componente. O seu programa externo só será carregado quando o componente for carregado.
- Cons: o script ainda estará disponível globalmente assim que for carregado.
-
Passos / Código:
<script> export default { name: 'Index', data() { return { } }, mounted() { if (document.getElementById('my-datatable')) return; // was already loaded var scriptTag = document.createElement("script"); scriptTag.src = "https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js"; scriptTag.id = "my-datatable"; document.getElementsByTagName('head')[0].appendChild(scriptTag); } } </script>
Outra opção é adicionar o programa dentro do Índice.html com v-if
directiva
<script v-if="loadGoogleAPI" async defer src="https://apis.google.com/js/api.js" ... ></script>
Dentro do ficheiro do componente (.vue
), Se quiser que o programa seja carregado, defina a opção como true
:
<script>
export default {
...
loadGoogleAPI: true,
data() {
...
}
};
</script>