在 Vue.js 中,JavaScript 代码的放置位置多样,具体选择取决于项目需求和代码组织方式。以下是常见的代码放置位置及示例说明:
1. <script> 标签(组件内嵌)- 位置:直接写在 .vue 文件的 <script> 标签中,位于 <template> 之后。
- 特点:适用于组件级逻辑,支持 export default 导出组件选项(如 data、methods 等)。
- 示例:<template> <!-- HTML 模板 --></template><script>export default { data() { return { message: "Hello Vue!" }; }, methods: { greet() { alert(this.message); } }};</script>
2. 外部 JavaScript 文件- 位置:将逻辑抽离到单独的 .js 文件,通过 <script src> 引入(较少用)或模块化导入(推荐)。
- 特点:适合复杂组件或代码复用,需配合构建工具(如 Vite、Webpack)。
- 示例:<!-- 直接引入(传统方式,不推荐) --><script src="./my-component.js"></script><!-- 模块化导入(推荐) --><script>import MyComponent from './MyComponent.js';export default { components: { MyComponent }};</script>
3. .vue 文件(单文件组件)- 位置:在单文件组件的 <script> 块中编写逻辑,与模板、样式封装在同一文件。
- 特点:Vue 官方推荐方式,支持 lang="ts" 等语法扩展。
- 示例:<script setup>// Vue 3 的 `<script setup>` 语法糖,更简洁import { ref } from 'vue';const count = ref(0);</script>
4. setup() 函数(Vue 3 组合式 API)- 位置:在组件选项或 <script setup> 中使用 setup()。
- 特点:逻辑组织更灵活,支持响应式变量(ref、reactive)和函数。
- 示例:// 选项式 APIexport default { setup() { const state = reactive({ count: 0 }); return { state }; }};// `<script setup>` 语法糖(推荐)<script setup>const count = ref(0);</script>
5. 其他位置Mixins:用于多组件共享逻辑,通过 mixins 选项混入。
const myMixin = { methods: { sharedMethod() {} } };export default { mixins: [myMixin]};Plugins:通过 app.use() 全局注入功能(如自定义指令、全局方法)。
const myPlugin = { install(app) { app.config.globalProperties.$myMethod = () => {} } };app.use(myPlugin);全局安装:在 main.js 中挂载到 Vue 实例(如全局状态管理)。
// main.jsapp.config.globalProperties.$api = axios.create();
总结建议- 简单组件:直接使用 <script> 或 <script setup>。
- 复杂逻辑:抽离到外部文件或使用 setup() 函数。
- 代码复用:优先选择 Composition API 或 Plugins,而非 Mixins(Vue 3 推荐)。
- 全局功能:通过 Plugins 或全局安装实现。
根据项目规模和团队习惯选择合适的方式,Vue 3 的 <script setup> 和组合式 API 是现代开发的趋势。