Vue指令文件

简介: Vue指令文件
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Vue测试</title>
  <script src="https://unpkg.com/vue/dist/vue.js"></script>
  <!--混入实例-->
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  <!--CDN-->
  <!--<script src="https://vuejs.org/js/vue.min.js"></script>-->
  <!--<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>-->
  <!--自定义过渡-->
  <!--<link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">-->
  <!--Velocity.js-->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js"></script>
  <!--Vue.js Ajax-->
  <script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
  <!--异步加载-->
  <script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></script>
  <style>
    .class1 {
      background: #7c1212;
      color: #0b5b98;
    }
    /* 可以设置不同的进入和离开动画 */
    /* 设置持续时间和动画函数 */
    .fade-enter-active, .fade-leave-active {
      transition: opacity 2s
    }
    .fade-enter, .fade-leave-to /* .fade-leave-active, 2.1.8 版本以下 */
    {
      opacity: 0
    }
    /* 可以设置不同的进入和离开动画 */
    /* 设置持续时间和动画函数 */
    /*CSS 过渡*/
    .slide-fade-enter-active {
      transition: all .3s ease;
    }
    .slide-fade-leave-active {
      transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
    }
    .slide-fade-enter, .slide-fade-leave-to
      /* .slide-fade-leave-active 用于 2.1.8 以下版本 */
    {
      transform: translateX(10px);
      opacity: 0;
    }
    /*CSS 动画*/
    .bounce-enter-active {
      animation: bounce-in .5s;
    }
    .bounce-leave-active {
      animation: bounce-in .5s reverse;
    }
    @keyframes bounce-in {
      0% {
        transform: scale(0);
      }
      50% {
        transform: scale(1.5);
      }
      100% {
        transform: scale(1);
      }
    }
  </style>
</head>
<body>
<div id="app">
  <!--获取变量值-->
  <p>{{ message }}</p>
  <p>{{ url }}</p>
  <p>{{detail()}}</p>
  <!--v-html指令:用于输出html代码;-->
  <p v-html="content"></p>
  <!--v-bind指令:绑定HTML属性中的值,v-bind:后跟属性名,在data里再设置该内容,例:v-bind:href="url",可以缩写为:href="url";-->
  <label for="r1">修改颜色</label><!--label标签为 input 元素定义标记,for属性与id相同-->
  <input id="r1" type="checkbox" v-model="use">
  <p v-bind:class="{'class1':use}">{{red}}</p>
  <!--v-if指令:当v-if="true"时执行标签里面的内容;-->
  <template v-if="ok">
    <p>if为true时显示</p>
  </template>
  <!--被包围在 pre 元素中的文本通常会保留空格和换行符-->
  <pre>
        <!--v-bind:href可以缩写为:href-->
        <a :href="url">Runoob官网</a>
    </pre>
  <!--双向数据绑定:input框内容改变影响上面message的内容
  比如在input、select、textarea、checkbox、radio等表单控件-->
  <input v-model="message"><br>
  <!--按钮监听DOM事件,v-on:click可以缩写为@click-->
  <button v-on:click="reverseMessage">反转字符串</button>
  <!--过滤器:使用管道符|标识,后面的过滤器函数对第一个参数进行操作;-->
  <p>字符串首字母转大写:{{message|capitalize}}</p>
  <!--if-else-if语句-->
  <p v-if="number > 0.5">随机数大于0.5</p>
  <p v-else-if="number === 0.5">随机数等于0.5</p>
  <p v-else="number < 0.5">随机数小于0.5</p>
  <!--v-show指令:类似于if语句,当v-show="true"时执行标签里面的内容;-->
  <h1 v-show="ok">展示内容</h1>
  <!--for循环遍历:遍历map集合请做参考-->
  <ol>
    <li v-for="site in sites">{{site.name}}:{{site.age}}</li>
  </ol>
  <p>{{reverseMessage3}}</p>
  <!--vm.$watch:监听输入框里的内容,另一个输入框接着改变内容;-->
  <p style="font-size: 25px">计数器:{{counter}}</p>
  <button @click="counter++" style="font-size: 25px">点我</button>
  <!--内联style样式,不推荐使用,经常使用一个变量来设置-->
  <p :style="{color:activeColor,fontSize:fontSize+'px'}">菜鸟教程</p>
  <button @click="say('Hello')">问候</button>
  <!--事件修饰符:带点后的内容-->
  <button @click.once="say('Hello')">问候只能点击一次</button>
  <!--<button>点击enter问候</button>-->
  <input @keyup.enter.space="say('Hello')" placeholder="选中输入框点击enter或者spce问候">
  <p>单选框:</p>
  <input id="java" type="radio" value="Java" v-model="radioName">
  <label for="java">Java</label>
  <input id="python" type="radio" value="Python" v-model="radioName">
  <label for="python">Python</label>
  <input id="c++" type="radio" value="C++" v-model="radioName">
  <label for="c++">C++</label><br>
  <span>选择的单选框内容为:{{radioName}}</span>
  <p>多个复选框:</p>
  <input id="java1" type="checkbox" value="Java" v-model="checkboxName">
  <label for="java1">Java</label>
  <input id="python1" type="checkbox" value="Python" v-model="checkboxName">
  <label for="python1">Python</label>
  <input id="c++1" type="checkbox" value="C++" v-model="checkboxName">
  <label for="c++1">C++</label><br>
  <span>选择的复选框内容为:{{checkboxName}}</span><br>
  <!--下拉选框-->
  <select name="webSite" v-model="selectedName">
    <option value="">请选择一个网站</option>
    <option value="www.csdn.com">CSDN</option>
    <option value="www.github.com">GitHub</option>
  </select>
  <p>选择的网站为:{{selectedName}}</p>
  <!--全局组件-->
  <runoob></runoob>
  <p>页面加载后,input元素自动获取焦点:</p>
  <input v-focus>
  <p v-runoob="{color:'green',text:'菜鸟教程!'}"></p>
  <!--设置路由-->
  <!--<p>
      <router-link to="/foo">Go to foo</router-link>
      <router-link to="/bar">Go to bar</router-link>
  </p>
  <router-view></router-view>-->
  <!--过渡组件-->
  <button v-on:click="show=!show">Velocity动画点我</button>
  <!--过渡-->
  <!--<transition name="fade">-->
  <!--CSS 过渡-->
  <!--<transition name="slide-fade">-->
  <!--CSS 动画-->
  <!--<transition name="bounce">-->
  <!--自定义过渡-->
  <!--<transition
          name="custom-classes-transition"
          enter-active-class="animated tada"
          leave-active-class="animated bounceOutRight"
  :duration="{enter:500,leave:800}">--><!--定制进入和移出的持续时间-->
  <!--JS钩子:要在methods中编写对应的方法-->
  <transition
    v-on:before-enter="beforeEnter"
    v-on:enter="enter"
    v-on:leave="leave"
    v-bind:css="false"
  >
    <p v-show="show" v-bind:style="styleobj">菜鸟教程 -- 学的不仅是技术,更是梦想!!!</p>
  </transition>
  <hr>
  <!--axios:遍历json中的字段-->
  <div v-for="site in info">
    {{site.File_newName}}
  </div>
  <input type="button" @click="get()" value="点我异步获取数据(Get)">
  <p style="font-size: 25px">计数器:{{products.id}}</p>
  <button @click="products.id++" style="font-size: 25px">set设值点我</button>
</div>
<script>
  Vue.directive('runoob', function (el, binding) {
    /*简写方式设置文本及背景颜色*/
    el.innerHTML = binding.value.text
    el.style.backgroundColor = binding.value.color
  })
  /*注册一个全局自定义指令 v-focus*/
  /*Vue.directive('focus',{
      /!*当绑定元素插入到 DOM 中*!/
      inserted:function (el) {
          /!*聚焦元素*!/
          el.focus()
      }
  })*/
  /*必须放到vue变量之前*/
  Vue.component('runoob', {
    template: '<h1>全局组件!</h1>'
  })
  var myproduct = {"id": 1, name: "book", "price": "20.00"};
  /*使用vm调用变量和直接调用变量一样,为了方便都是直接调用,不使用vm来调用*/
  var data = {
    message: 'this a variable',
    url: 'http://www.runoob.com',
    content: '<h1>html输出内容</h1>',
    red: '我会变颜色',
    use: false,
    ok: true,
    number: Math.random(),
    sites: [
      {name: 'Java', age: '8'},
      {name: 'Python', age: '8'},
      {name: 'C++', age: '8'},
      {name: '.Net', age: '8'}
    ],
    counter: 1,
    activeColor: 'red',
    fontSize: 25,
    radioName: '',
    checkboxName: [],
    selectedName: '',
    show: true,
    styleobj: {
      fontSize: '30px',
      color: 'red'
    },
    info: null,
    products: myproduct
  }
  var vm = new Vue({
    el: '#app',
    /*给变量设置内容*/
    data: data,
    computed: {
      reverseMessage3: function () {
        return 'reverseMessage3';
      }
    },
    methods: {
      detail: function () {
        return 'details';
      },
      reverseMessage() {
        this.message = this.message.split('').reverse().join('');
      },
      say(letter) {
        alert(letter)
      },
      /*Velocity.js方法*/
      beforeEnter: function (el) {
        el.style.opacity = 0
        el.style.transformOrigin = 'left'
      },
      enter: function (el, done) {
        Velocity(el, {opacity: 1, fontSize: '1.4em'}, {duration: 300})
        Velocity(el, {fontSize: '1em'}, {complete: done})
      },
      leave: function (el, done) {
        Velocity(el, {translateX: '15px', rotateZ: '50deg'}, {duration: 600})
        Velocity(el, {rotateZ: '100deg'}, {loop: 2})
        Velocity(el, {
          rotateZ: '45deg',
          translateX: '30px',
          translateY: '30px',
          opacity: 0
        }, {complete: done})
      },
      get: function () {
        /*http://localhost:63342/try/ajax/ajax_info.txt*/
        this.$http.get('/try/ajax/ajax_info.txt').then(function (res) {
          document.write(res.body);
        }, function () {
          console.log('请求失败处理');
        });
      }
    },
    filters: {
      capitalize: function (value) {
        if (!value) return ''
        value = value.toString()
        return value.charAt(0).toUpperCase() + value.slice(1)
      }
    },
    directives: {
      /*注册一个全局自定义指令 v-focus*/
      focus: {
        /*当绑定元素插入到 DOM 中*/
        inserted: function (el) {
          /*聚焦元素*/
          el.focus()
        }
      }
    },
    /*axios*/
    /*axiosData() {
        return {
            info: null
        }
    },*/
    mounted() {
      axios
        .get('https://www.91cht.com/woxiang/control/bapi?operFlag=showStoreImg&Meta_storeNo=06096519')
        .then(response => (this.info = response.data.StoreImgList)
    ).catch(function (error) { // 请求失败处理
        console.log(error);
      });
    }
  })
  document.write(vm.url === data.url) // true
  document.write('</br>')//换行
  /*$表示获取冒号前的内容*/
  document.write(vm.$data === data) // true
  vm.$watch('counter', function (dest, source) {
    alert('原来的值:' + source + ',变为:' + dest);
  });
  /*setTimeout 设置 10 秒后计算器的值加上 20*/
  setTimeout(function () {
    vm.counter += 20;
  }, 10000);
  /*定义路由*/
  /*const Foo={template:'<div>foo</div>'}
  const Bar={template:'<div>bar</div>'}
  /!*定义路由组件*!/
  const routes=[
      {path:'/foo',component:Foo},
      {path:'/bar',component:Bar}
  ]
  const router=new VueRouter({
      routes
  })
  const app = new Vue({
      router
  }).$mount('#app')*/
  /*定义一个混入对象*/
  var myMixin = {
    created: function () {
      this.startmixin()
    },
    methods: {
      startmixin: function () {
        document.write('<br>' + '欢迎来到混入实例');
      }
    }
  };
  var Component = Vue.extend({
    mixins: [myMixin]
  })
  var component = new Component();
  // vm.products.qty = '1';
  /*set方式设置值*/
  Vue.set(myproduct, 'name', 'xhy');
  console.log(vm);
  Vue.delete(myproduct, 'price');
  console.log(vm);
  vm.$watch('products.id', function (nval, oval) {
    alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!');
  });
</script>
</body>
</html>
目录
相关文章
|
2月前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
147 1
|
6天前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
10天前
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
60 12
|
6天前
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
6天前
|
JavaScript 前端开发 数据安全/隐私保护
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理库,用于构建单页面应用(SPA)。它将不同页面映射到对应组件,支持嵌套路由、路由参数和导航守卫等功能,简化复杂前端应用的开发。主要特性包括路由映射、嵌套路由、路由参数、导航守卫和路由懒加载,提升性能和开发效率。安装命令:`npm install vue-router`。
|
27天前
|
JavaScript 安全 API
iframe嵌入页面实现免登录思路(以vue为例)
通过上述步骤,可以在Vue.js项目中通过 `iframe`实现不同应用间的免登录功能。利用Token传递和消息传递机制,可以确保安全、高效地在主应用和子应用间共享登录状态。这种方法在实际项目中具有广泛的应用前景,能够显著提升用户体验。
54 8
|
28天前
|
存储 设计模式 JavaScript
Vue 组件化开发:构建高质量应用的核心
本文深入探讨了 Vue.js 组件化开发的核心概念与最佳实践。
74 1
|
存储 前端开发 JavaScript
为什么我不再用Vue,改用React?
当我走进现代前端开发行业的时候,我做了一个每位开发人员都要做的决策:选择一个合适的框架。当时正逢 jQuery 被淘汰,前端开发者们不再用它编写难看的、非结构化的老式 JavaScript 程序了。
|
3月前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
111 58
|
2月前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。

热门文章

最新文章