• Vue.js基础(一)


    目录

    1、{{ }} 文本插值

    2、v-html原始html

    3、v-bind Attribute(属性)绑定\三元运算符

    4、v-for列表渲染

    5、v-on监听事件

    6、事件调用方法

    7、v-model表单的输入绑定  

    8、Props组件交互

    父传子

    子传父

    子传父总结


    1、{{ }} 文本插值

    1. <template>
    2. <div class="hello">
    3. <p>{{ msg }}p>
    4. div>
    5. template>
    6. <script>
    7. export default {
    8. data(){
    9. return {
    10. msg:"学习vue"
    11. }
    12. }
    13. }
    14. script>

    2、v-html原始html

    一些html标签使用模板并不能够生成效果;比如下方示例 标签,要使用v-html才能有效果。

    双大括号会将数据解释为纯文本,而不是 HTML。若想插入 HTML,需要使用 v-html 指令:

     

    1. <template>
    2. <div class="hello">
    3. <h2>学习vue:模板文件h2>
    4. <p>{{ msg }}p>
    5. <div>{{ rawHtml }}div>
    6. <div v-html="rawHtml">div>
    7. div>
    8. template>
    9. <script>
    10. export default {
    11. data(){
    12. return {
    13. msg:"学习vue",
    14. }
    15. }
    16. }
    17. script>

     

    3、v-bind Attribute(属性)绑定\三元运算符

    模板语法不能在html属性中使用,可以使用v-bind指令(可简写成:)

    1. <template>
    2. <div class="hello">
    3. <h2>学习vue:模板文件h2>
    4. <div v-bind:id="dynamicId">div>
    5. <p>{{ num+10 }}p>
    6. <p>{{ flag?"chensir":"江河" }}p>
    7. div>
    8. template>
    9. <script>
    10. export default {
    11. data(){
    12. return {
    13. dynamicId:10002,
    14. num:10,
    15. flag:true
    16. }
    17. }
    18. }
    19. script>

    4、v-for列表渲染

    v-for 指令用于循环渲染列表,其中每个循环项需要唯一的 key 属性,以便 Vue.js 可以跟踪每个列表项的身份,从而在列表数据发生更改时准确地重新渲染列表,提高渲染效率。

    v-for指令中的 item 表示数组中的每一个元素,而 index 表示其在数组中的下标; :key="item.id" 表示在循环中为每个列表项分配唯一的标识符,以防止在更新时产生性能问题。

    1. 需要绑定唯一的key
    2. In可以换成of
    3. 当没有id的时候,就要写成[v-for=”(item,index) in data” :key=”index”]

             当有id的时候,就可以写成[v-for=”item in data” :key=”item.id”] 

    1. <template>
    2. <div class="hello">
    3. <h2>学习vue:列表渲染h2>
    4. <ul>
    5. <li v-for="(item,index) in newsList" :key="item.id">
    6. {{ index+1 }}--- {{ item.title }}
    7. li>
    8. ul>
    9. div>
    10. template>
    11. <script>
    12. export default {
    13. data(){
    14. return{
    15. newsList:[
    16. {
    17. id:1001,
    18. title:"学vue1"
    19. },
    20. {
    21. id:1002,
    22. title:"学vue2"
    23. },
    24. {
    25. id:1003,
    26. title:"学vue3"
    27. },
    28. {
    29. id:1003,
    30. title:"学vue3"
    31. }
    32. ]
    33. }
    34. }
    35. }
    36. script>

    5、v-on监听事件

    v-on: 可简写为@

    1. <template>
    2. <div class="hello">
    3. <h2>学习vue:监听事件h2>
    4. <button v-on:click="counter+=1"> Add {{counter}}button>
    5. div>
    6. template>
    7. <script>
    8. export default {
    9. data(){
    10. return{
    11. counter:0
    12. }
    13. }
    14. }
    15. script>

    6、事件调用方法

    1. <template>
    2. <div class="hello">
    3. <h2>学习vue:监听事件h2>
    4. <button v-on:click="counter+=1"> Add {{counter}}button>
    5. <button @click="clickHandle">操作消息的按钮button>
    6. <p> {{ message }}p>
    7. <button @click="say('hi')">say hibutton>
    8. <button @click="say('what')">say whatbutton>
    9. <ul>
    10. <li @click="clickItemHandle(item)" v-for="(item,index) in names" :key="index">{{ item }}li>
    11. ul>
    12. div>
    13. template>
    14. <script>
    15. export default {
    16. data(){
    17. return{
    18. counter:0,
    19. message:"消息通知",
    20. names:["小红","小花","豆豆"]
    21. }
    22. },
    23. methods:{
    24. clickHandle(event){
    25. //调用data中字段用this
    26. this.message="消息被撤回了"
    27. console.log(event)
    28. event.target.innerHTML="点击之后"
    29. },
    30. say(data){
    31. console.log(data)
    32. },
    33. clickItemHandle(msg){
    34. console.log(msg)
    35. }
    36. }
    37. }
    38. script>

    7、v-model表单的输入绑定  

    lazy:当失去光标时值才同步

    trim:自动过滤输入的首尾空白字符

    8、Props组件交互

    Props是Vue.js中的一种属性传递方式,允许一级组件向下传递数据给它的子组件。在Vue中,所有的组件默认的数据是私有的,这也让每个组件的可维护性很高。但是,当我们需要在多个组件之间共享数据时,就需要使用Props。

    使用Props需要注意以下几点:

    属性是单向数据流,即父组件向子组件传递数据,子组件不能直接修改Props的值。

    不应该在子组件中直接修改Props的值,这样会导致数据无法保持单向性。

    如果需要修改Props传入的数据,在子组件中需要利用Vue提供的事件机制通知父组件修改数据。

    需在vue.config.js中关闭eslint校验:lintOnSave: false

    父传子

    app.vue

    1. <template>
    2. <MyComponent :title="title" :age="age" :names="names">MyComponent>
    3. template>
    4. <script>
    5. // import HelloWorld from './components/HelloWorld.vue'
    6. import MyComponent from './components/MyComponent.vue'
    7. export default {
    8. name: 'App',
    9. data(){
    10. return{
    11. title:"从app传过来的",
    12. age:18,
    13. names:["花花","豆豆","牛牛"]
    14. }
    15. },
    16. components: {
    17. // HelloWorld,
    18. MyComponent
    19. }
    20. }
    21. script>

     MyComponent.vue

    1. <template>
    2. <h3>prop传递数据h3>
    3. <p>{{ title }}p>
    4. <p>age={{ age }}p>
    5. <ul>
    6. <li v-for="(item,index) in names" :key="index">{{ item }}li>
    7. ul>
    8. template>
    9. <script>
    10. export default{
    11. props:{
    12. title:{
    13. type:String,
    14. default:""
    15. },
    16. age:{
    17. type:Number,
    18. default:0
    19. },
    20. names:{
    21. type:Array,
    22. //数组和对象必须使用函数进行返回
    23. default:function(){
    24. return []
    25. }
    26. }
    27. }
    28. }
    29. script>

    子传父

    app.vue:

    1. <template>
    2. <div id="app">
    3. <school :getSchoolName="getSchoolName">school>
    4. <hr />
    5. <student @getStudentName="getStudentName">student>
    6. <hr />
    7. <grade ref="Grade">grade>
    8. div>
    9. template>
    10. <script>
    11. import school from "./components/School.vue";
    12. import student from "./components/Student.vue";
    13. import grade from "./components/Grade.vue";
    14. export default {
    15. name: "App",
    16. components: {
    17. school,
    18. student,
    19. grade,
    20. },
    21. methods: {
    22. //方法一:父组件给子组件一个方法,子组件接收该方法
    23. getSchoolName(name) {
    24. console.log("学校名称:", name);
    25. },
    26. //方法二:自定义事件,子组件使用$emit函数触发父组件绑定的事件
    27. getStudentName(name) {
    28. console.log("学生名称:", name);
    29. },
    30. //方法三:通过ref属性获取子组件实例对象
    31. getGrade(grade){
    32. console.log("数学成绩:",grade );
    33. }
    34. },
    35. mounted() {
    36. this.$refs.Grade.$on("getGrade",this.getGrade)
    37. },
    38. };
    39. script>

    School.vue

    1. <template>
    2. <div>
    3. 学校名称{{ name }}, 学校地址{{ address }}
    4. <button @click="sendName">点我获取学校名称button>
    5. div>
    6. template>
    7. <script>
    8. export default {
    9. name: "School",
    10. props: ["getSchoolName"],
    11. data() {
    12. return {
    13. name: "北京大学",
    14. address: "北京",
    15. };
    16. },
    17. methods: {
    18. sendName() {
    19. this.getSchoolName(this.name);
    20. },
    21. },
    22. };
    23. script>

    Student.vue

    1. <template>
    2. <div>
    3. 学生姓名{{ name }}, 学生年龄{{ age }}
    4. <button @click="sendStudentName">点我获取学生姓名button>
    5. div>
    6. template>
    7. <script>
    8. export default {
    9. name: "Student",
    10. data() {
    11. return {
    12. name: "张三",
    13. age: 18,
    14. };
    15. },
    16. methods: {
    17. sendStudentName() {
    18. this.$emit("getStudentName", this.name);
    19. },
    20. },
    21. };
    22. script>

    Grade.vue

    1. <template>
    2. <div>
    3. 数学:{{ mathGrade }}
    4. <button @click="getGrade">点我获取数学成绩button>
    5. div>
    6. template>
    7. <script>
    8. export default {
    9. name: "Grade",
    10. data() {
    11. return {
    12. mathGrade: 99,
    13. };
    14. },
    15. methods: {
    16. getGrade(){
    17. this.$emit("getGrade",this.mathGrade)
    18. }
    19. },
    20. };
    21. script>

    子传父总结

    方法一

     总结:子组件通过props属性接收父组件的方法,然后在子组件中调用父组件的方法以及传递参数。

    1. <---父组件--->
    2. <school :getSchoolName="getSchoolName">school>
    3. <---子组件--->
    4. export default {
    5. name: "School",
    6. props: ["getSchoolName"],
    7. data() {
    8. return {
    9. name: "北京大学",
    10. address: "北京",
    11. };
    12. },
    13. methods: {
    14. //子组件的一个点击事件
    15. sendName() {
    16. //由于接收到方法参数,所以可以直接调用
    17. this.getSchoolName(this.name);
    18. },
    19. },
    20. };

    方法二

    总结:通过自定义事件,绑定到子组件实例对象上,然后在子组件中使用$emit方法触发自定义事件以及传参,父组件调用回调函数完成取值

    1. <---父组件--->
    2. <student @getStudentName="getStudentName">student>
    3. <---子组件--->
    4. export default {
    5. name: "Student",
    6. data() {
    7. return {
    8. name: "张三",
    9. age: 18,
    10. };
    11. },
    12. methods: {
    13. //子组件的一个点击事件
    14. sendStudentName() {
    15. //通过$emit触发自定义事件(@后面的为触发的自定义事件)
    16. this.$emit("getStudentName", this.name);
    17. },
    18. },
    19. };

     方法三

    总结:通过ref属性,父组件获取到子组件实例对象,然后触发方法

    1. <---父组件--->
    2. <grade ref="Grade">grade>
    3. //script中使用挂载函数:
    4. mounted() {
    5. //this.$refs.Grade表示获取到grade这个实例
    6. //$on()表示当……时候,第一个参数表示当调用getGrade函数的时候,第二个参数表示父组件中的回调函数
    7. this.$refs.Grade.$on("getGrade",this.getGrade)
    8. },
    9. methods:{
    10. //父组件的回调函数
    11. getGrade(grade){
    12. console.log("数学成绩:",grade );
    13. }
    14. }
    15. <---子组件--->
    16. export default {
    17. name: "Grade",
    18. data() {
    19. return {
    20. mathGrade: 99,
    21. };
    22. },
    23. methods: {
    24. getGrade(){
    25. //使用方法和方法二中的类似
    26. this.$emit("getGrade",this.mathGrade)
    27. }
    28. },
    29. };

  • 相关阅读:
    面试突击39:synchronized底层是如何实现的?
    一文2000字教你从0到1实现Jmeter 分布式压测
    《三国志》游戏的数据表设计与优化
    [SQL] SELECT...CASE...WHEN...THEN...是在SQL中用于进行条件判断和赋值的语句
    集成经验模态(EEMD)原理详解与python实现
    机器学习中的类不平衡问题
    驱动DAY9
    什么样的人不适合做管理者
    查看windows后台进程命令行参数
    技术应用:C# System.Data.DataTable().Compute 基本用法
  • 原文地址:https://blog.csdn.net/weixin_45326523/article/details/132694499