常用的vue组件,组件vue文件必须有的要素有哪些

  常用的vue组件,组件vue文件必须有的要素有哪些

  我最近浏览了vue。我发现了一个单一的文件组件,这个组件之前基本上被忽略了。所以本文详细介绍了vue单文件组件的实现,有一定的参考价值,有兴趣的朋友可以参考一下。

  我最近浏览了vue。我发现了一个单一的文件组件,这个组件之前基本上被忽略了。vue.js中的单文件组件允许在一个文件中定义组件的所有内容。也就是说一个页面或者一个组件,我们想把它们绑定在一起,那么vue的这个单文件组件就可以做到。正如vue官网所说,“在很多Vue项目中,我们使用app.component定义全局组件,然后使用app . mount(# app)在每个页面中指定一个容器元素。”这里所有的组件都比较简单,但是面对一个比较复杂的项目,这种方法就不行了。原因如下:

  全局定义强制每个组件中的名称不能重复;

  字符串模板缺少语法突出显示。HTML中有多行的时候,难看\;

  不支持CSS(不支持CSS)是指HTML和JavaScript组件化时,明显省略了CSS;

  没有构建步骤,只能用HTML和ES5 JavaScript,不能用Pug等前置处理器。

  (原名杰德)和巴别。

  所有这些都可以通过扩展名为。vue,并且还可以使用webpack或Browserify等构建工具。

  那么需要如何在vue项目中创建一个单文件组件呢?

  

构建

  npm安装-D @ vue/编译器-sfc

  在控制台上输入上面的代码,然后会出现一个文件夹和另一个json文件。如下所示:

  如果我们想要构建一个单独的文件组件,我们必须创建自己的文件。同时,你必须对webpack有一定的了解。

  例如,我们自己安装一些需要的依赖项。比如css-loader,css的预编译处理器等。因为项目需要解析vue文件,所以vue加载器是必要的。

  这些文件实际上是vue的简单版本。例如,hello.vue文件的简单版本如下

  由此可以看出,它由三部分组成。模板必不可少,另外两个部分,样式和脚本,可以忽略。

  Script可以让你的页面js与vue完美结合,而style可以使用预处理器构建简洁且功能更多的组件。(这个单文件组件和原来前端开发中的html文档很像。它有自己的样式标签和脚本标签,但是表示层使用模板标签。由于方法简单,强大的分层组件(内容/模板:性能:

  可能有些朋友喜欢拆分不同的模块,也就是vue文档中提到的关注点分离。那就无所谓了。您可以解包这些文档,将css和js解包到另一个文件中,然后将它们引入到组件中。如下所示:

  !我的组件

  模板

  div这将是预编译的/div

  /模板

  脚本src=。/my-component.js/script

  style src=。/my-component . CSS /样式

  该项目的总目录如下:

  其中,index.html

  !声明文档类型

  html lang=en

  头

  meta charset=utf-8 /

  titleVue带SFC/title的简单待办事项应用程序

  环

  rel=样式表

  href= https://cdnjs . cloud flare . com/Ajax/libs/normalize/8 . 0 . 1/normalize . min . CSS rel= external no follow rel= external no follow

  /

  link rel= style sheet href=/dist/main . CSS rel= external no follow rel= external no follow /

  /头

  身体

  div id=app/div

  script src=/dist/main . js /script

  /body

  /html

  package.json

  {

   private :对,

  脚本:{

   dev: webpack-dev-server ,

  build: webpack - env.prod

  },

  依赖项:{

  ^3.1.1

  },

  devDependencies: {

  @vue/compiler-sfc: ^3.1.1

  “CSS-loader”:^3.5.2,

  “文件加载器”:^6.0.0,

  迷你CSS-提取-插件:^0.9.0,

  "铁笔":^0.54.7,

  "唱针装载机":^3.0.2,

   url-loader: ^4.1.0,

  “vue-loader":^16.0.0-alpha.3,

  “vue-style-loader":^4.1.2,

  "网络背包":^4.42.1,

   webpack-cli: ^3.3.11,

  "网络包-开发-服务器":^3.10.3

  },

  关键字:[todo , vue],

  name : vue-todo-list-app-with-single-file-component ,

  描述:"一个用某视频剪辑软件编写的简单的待办事项列表应用程序,支持单个文件组件(证监会).”

  }

  webpack.config.js

  const path=require( path );

  const { VueLoaderPlugin }=require( vue-loader );

  const minicsetractplugin=require( mini-CSS-extract-plugin );

  module.exports=(env={})=({

  模式:env.prod?生产:开发,

  devtool: env.prod?源映射“:”廉价模块评估源映射,

  条目:[

  环境产品?假:要求。解析(` web pack-dev-server/client `),

  path.resolve(__dirname, ./src/main.js )

  ].过滤器(布尔型),

  输出:{

  path: path.resolve(__dirname, ./dist ),

  公共路径:"/dist/"

  },

  解决:{

  别名:{

  //这在技术上是不需要的,因为捆绑器的默认“vue”条目

  //是一个简单的从“@ vue/runtime-DOM”中导出* .然而有了这个

  //额外的重新导出会以某种方式导致工具总是使模块无效

  //在第一次HMR更新时,使页面重新加载。

  vue:"@ vue/runtime-DOM "

  }

  },

  模块:{

  规则:[

  {

  测试:/\。vue$/,

  使用:“vue-loader”

  },

  {

  测试:/\。巴布亚新几内亚美元/,

  使用:{

  加载程序:"网址加载程序",

  选项:{限制:8192 }

  }

  },

  {

  测试:/\。css$/,

  使用:[

  {

  加载程序:minicsextractplugin。装载机,

  选项:{ hmr:环境产品}

  },

   css-loader

  ]

  },

  {

  测试:/\。手写笔$/,

  使用:[vue-style-loader , css-loader , stylus-loader]

  },

  {

  测试:/\。帕格$/,

  装载机:"平板装载机"

  }

  ]

  },

  插件:[

  new VueLoaderPlugin(),

  新的minicsetractplugin({

  文件名:[名称]。 css

  })

  ],

  devServer: {

  inline: true,

  热:真的,

  统计:"最小",

  contentBase: __dirname,

  叠加:真的,

  injectClient: false,

  disableHostCheck: true

  }

  });

  test.html

  !声明文档类型

  html lang=en

  头

  meta charset=utf-8 /

  titleVue带SFC/标题的简单待办事项应用程序

  环

  rel=样式表

  href= https://cdnjs。云层耀斑。com/Ajax/libs/normalize/8。0 .1/正常化。量滴CSS rel=外部不跟随 rel=外部不跟随

  /

  link rel=样式表 href=/dist/main。CSS rel=外部不跟随 rel=外部不跟随/

  /头

  身体

  div id=app222 测试页/div

  脚本src=/dist/main。js /脚本

  /body

  /html

  科学研究委员会文件夹里边有三个文件,App.vue main.js和TodoItem.vue

  其中:App.vue

  模板

  div class=wrapper

  氕我的待办事项列表/h1

  form @submit.prevent=addTodo

  input type= text name= todo-text v-model= New dotext placeholder= New todo

  /表单

  ul v-if=todos.length

  todo项目v-for= todos中的 todo :key= todo。 id :todo= todo @ remove= remove todo /

  /ul

  列表中没有剩下任何东西。在上面的输入中添加一个新的待办事项./p

  /div

  /模板

  脚本

  从导入到项目 TodoItem.vue

  设nextTodoId=1

  const createTodo=text=({

  文字,

  id: nextTodoId

  })

  导出默认值{

  组件:{

  托多伊泰姆

  },

  data() {

  返回{

  todos: [

  createTodo(Learn Vue ),

  createTodo(了解单文件组件),

  createTodo("爱上")

  ],

  newTodoText:" "

  }

  },

  方法:{

  addTodo() {

  const修剪文本=this。newdotext。修剪()

  if (trimmedText) {

  这个。托多斯。push(创建todo(修剪的文本))

  }

  this.newTodoText=

  },

  removeTodo(item) {

  这个。todos=这个。托多斯。filter(todo=todo!==项目)

  }

  }

  }

  /脚本

  style lang=stylus

  *,*:之前,*:*之后

  框尺寸边界框

  html,正文

  字体16px/1.2 blinkmasystemfont,-apple-system, Segoe UI ,Roboto,Helvetica,Arial,无衬线

  填充10px。包装材料

  宽度75%

  边距0自动

  形式

  页边距-底部20px

  输入[type=text]

  宽度100%

  填充10px

  边框1px纯色#777

  李

  边距0

  填充0

  p .无

  颜色#888

  小号字体

  /风格

  main.js

  从“vue”导入{ createApp }

  从导入应用程序。/App.vue

  createApp(应用程序)。挂载(#app)

  TodoItem.vue

  模板

  里

  span{{ todo.text }}/span

  button @ click . prevent= $ emit( Remove ,todo)Remove/button

  /李

  /模板

  脚本

  导出默认值{

  道具:{

  待办事项:{

  必填:真,

  类型:对象

  }

  }

  }

  /脚本

  style lang=stylus 范围

  里

  显示flex

  边距5px 0

  跨度

  flex 1

  按钮

  边框1px纯橙色

  背景橙色

  颜色为白色

  字体大小0.8雷姆

  填充2px 4px

  光标指针

  :悬停

  边框颜色#ff8100

  背景#ff8100

  /风格

  注意

  如果不了解webpack,建议根据官网说明,用vue脚手架安装基础工具。

  或者按照我给的pakage.json放到项目上,npm安装,安装最基础的环境,然后你就可以通过npm run dev在本地开发了。

  其实我觉得这个单文件组件用处不大。除非是纯js项目,而且用的库和组件都很老,那么这个时候用这个单文件组件开发新功能的效果还是不错的,前提是你熟悉vue。同时,我建议大家学习webpack。对bable一无所知,然后通过node启动项目。

  实际上,使用一个文件来分层管理html/css/JavaScript,并将其统一到一个文件中,确实可以使我们的项目看起来更有组织性和标准化。因为在我们的jq时代,css经常混杂在html中,一个简单的点击事件就要把它们分开。这种体验当然没有“层层统治”那么清晰。

  参考资料:

  1.https://v3.cn.vuejs.org/guide/single-file-component.html#在线演示

  2、https://www.cnblogs.com/houxianzhou/p/14510450.html

  关于vue单文件组件实现的这篇文章到此为止。有关vue单文件组件的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: