vue相关

作者: 幻如常 | 来源:发表于2021-04-07 18:33 被阅读0次

vue相关

vue入门

  • 下载vue.js
  • 创建静态web项目
  • 将vue.js导入项目
  • 编写hello页面,引入vue.js查看效果
    <head>
 <meta charset="UTF-8">
 <title>hello-vue</title>
 <script src="/js/vue/vue.js"></script>
</head>
<body>
<div id="app">
    {{ message }}
</div>

<script>
    var app = new Vue({
    el: '#app',
    data: {
    message: 'Hello Vue!'
        }
    })
</script>
</body>
</html>

常见指令

  • {{属性}}:常规的取值方式,只在和vue关联的标签中有效,对应上面绑定了id='app'的div标签中才有效
  • v-bind:表示通知vue在渲染的DOM标签时,将bind绑定的属性和Vue实例data中同名属性值保持一致(也就是绑定数据),可以简写成(:)
    <div id="app">
 <!--v-bind-->
 <span v-bind:title="testTitle">看这里,看这里</span>
 <!--下面这种写法是一个意思-->
 <span :title="testTitle">看这里,看这里</span>
</div>
<script>
    var vue = new Vue({
    el:"#app",
    data:{
        testTitle:"瞅啥瞅~"
    }
    })
</script>
  • v-model:双向数据绑定和单向数据绑定:使用 v-model 进行双向数据绑定
    功能与v-bind类似,不过数据可同步改动,即修改标签中的元素数,对应的Vue实例对象中data对应的数据也会发生变化
  • v-html:按照html的格式进行取值
        <div id="app" >
        <!--这种直接取出来的数据是带有span标签的-->
    {{content}}
    </div>
        <!--v-html(这种取出来是不带标签的):将html格式数据渲染出来-->
        <div id="app" v-html="content">
    </div>
    <script>
        var vue = new Vue({
        el:"#app",
        data:{
            content:"<span style='color: red;'>这是内容</span>"
            }
        })
    </script>
    
  • v-if判断指令
        <!--age是否大于18,等于18,小于18-->
        <div id="app">
        <span v-if="age > 18">成年了</span>
        <span v-else-if="age < 18">未成年</span>
        <span v-else="age == 18">踩线了</span>
        </div>
        <script>
            var vue = new Vue({
            el:"#app",
            data:{
                age:18
            }
            })
        </script>
    
  • v-for:循环指令
        <body>
            <ul id="app">
                <!--<li>a</li>
                <li>b</li>
                <li>c</li>-->
                <li v-for="item in arrs">{{item}}</li>
            </ul>
            <script>
            var app = new Vue({
                el:'#app',
                data:{
                    arrs:['aa','bb','cc']
                }
            })
        </script>
        </body>
    
  • 对象集合
        <body>
        <ul id="app">
            <!--(item,index)前面的是元素,后面的是元素顺序,这是固定的位置,不能更改-->
            <li v-for="(item,index) in arrs">{{index}}-{{item.name}}</li>
        </ul>
    
        <script>
        var app = new Vue({
        el:'#app',
        data:{
            arrs:[
                {id:1,name:'zs',age:18},
                {id:2,name:'ls',age:19},
                {id:3,name:'ww',age:20}
            ]
        }
        })
        </script>
        </body>
    
  • v-on:事件绑定,可简写成@,如v-on:click //绑定点击事件-->(@click注意了,这里的@后面是没有冒号的)
        <body>
        <ul id="app">
        <!--(item,index)前面的是元素,后面的是元素顺序,这是固定的位置,不能更改-->
        <!--$event:表示事件信息封装对象,写法是固定的,这里表示的就是z整个事件对象,-->
        <li v-on:click="choseClick($event)" v-for="(item,index) in arrs">{{index}}-{{item.name}}</li>
        <!--以下写法与上面的效果一样-->
        <!--<li @click="choseClick" v-for="(item,index) in arrs">{{index}}-{{item.name}}</li>-->
        </ul>
    
        <script>
            var app = new Vue({
                el:'#app',
                data:{
                    arrs:[
                        {id:1,name:'zs',age:18},
                        {id:2,name:'ls',age:19},
                        {id:3,name:'ww',age:20}
                    ]
                },
                methods:{
                    //这个就是事件函数
                    choseClick:function (ev) {
                        //拿到事件对象
                       console.log(ev);
                       //获取当前的事件元素(也就是当前项目中的li元素)
                       console.log(ev.currentTarget);
                        alert(11);
                    }
                }
            })
        </script>
        </body>
    
  • 事件传参
        <ul>
        <li v-for="u in list" v-on:click="choseClick($event,u.id,u.name)">
        {{u.id}}-{{u.name}}-{{u.age}}-{{u.sex==1?'男':'女'}}
        </li>
        </ul>
        methods:{
            choseClick:function (e, id, name) {
            console.log(e.currentTarget, id, name);
            }
        }
    

属性

  • el:用来指定编译器从什么地方开始解析语法(可以简单理解为将Vue实例对象绑定在页面的那个标签上的)
  • data:用来组织从view中抽象出来的属性,可以说将视图的数据抽象出来存放在data中
  • methods:放置页面中的业务逻辑,js函数一般都放置在methods中(可以简单理解为存放自定义方法的方法区)
  • filters:过滤器集合,专门存放过滤器的
        <body>
        <ul id="app">
            <li v-for="(item,index) in arrs">
                {{index}}-{{item.name}}-{{item.sex | sexFilter}}</li>
        </ul>
        <script>
            var app = new Vue({
                el:'#app',
                data:{
                    arrs:[
                        {id:1,name:'zs',age:18,sex:1},
                        {id:2,name:'ls',age:19,sex:0},
                        {id:3,name:'ww',age:20,sex:-1}
                    ]
                },
                filters:{
                    dataFormat:function () {
                        //多用来做数据格式转换
                    },
                    sexFilter:function (sex) {
                        if (sex == 0){
                            return '女'
                        }else if(sex == 1){
                            return '男'
                        }else {
                            return '保密'
                        }
                    }
                }
            })
        </script>
        </body>
    
  • mounted:是一个函数,在Vue实例对象创建时调用,也就是data之前,常用来初始化data中的数据
        <body>
    <ul id="app">
        <li v-for="(item,index) in arrs">
            {{index}}-{{item.name}}-{{item.sex}}</li>
    </ul>
    
    <script>
        var app = new Vue({
            el:'#app',
            data:{
                arrs:[
                    /*{id:1,name:'zs',age:18,sex:1},
                    {id:2,name:'ls',age:19,sex:0},
                    {id:3,name:'ww',age:20,sex:-1}*/
                ]
            },
            mounted:function () {
                console.log('先执行了吧');
                let _this = this;
                //模拟请求获取数据
                $.get('/data/employ-data.json',function (data) {
                    console.log(data);
                    _this.arrs = data;
                })
            }
        })
    </script>
    </body>
    

前后端项目分离相关问题

  • 在后端服务器配置类里面配置跨域的Bean,解决跨域问题
        //跨域访问时要配置这里
        @Bean
        public WebMvcConfigurer corsConfigurer() {
            return new WebMvcConfigurer() {
                @Override
                //重写父类提供的跨域请求处理的接口
                public void addCorsMappings(CorsRegistry registry) {
                    //添加映射路径
                    registry.addMapping("/**")
                            //放行哪些原始域
                            //.allowedOrigins("*")
                            /*这里要配置下新版版的,上面这个allowedOrigins是老版本的,会报错*/
                            .allowedOriginPatterns("*")
                            //是否发送Cookie信息
                            .allowCredentials(true)
                            //放行哪些原始域(请求方式)
                            .allowedMethods("GET", "POST", "PUT", "DELETE","OPTIONS")
                            //放行哪些原始域(头部信息)
                            .allowedHeaders("*")
                            //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
                            .exposedHeaders("Header1", "Header2");
                }
            };
        }
    
  • 在html页面获取url上的参数
    <script>
        //获取url上的请求参数
        function getParams() {
        //获取问号及问号后面的内容
        var url = window.location.search;
        var params = new Object();
        if (url.indexOf("?") != -1) {
            //截取问号后面的内容,再使用&分割多个属性
            //从第1个开始截取,因为第0个是?
            var arr = url.substr(1).split("&");
            for (var i = 0; i < arr.length; i++) {
                //使用=分割为keyvalue
                var keyValue = arr[i].split("=");
                params[keyValue[0]] = keyValue[1];
                }
            }
            return params;
        }
    </script>
    

相关文章

网友评论

      本文标题:vue相关

      本文链接:https://www.haomeiwen.com/subject/wlgukltx.html