Vue学习(一)

Vue学习

  1. 启动:npm start OR npm run dev
  2. npm 安装elementUI:npm i element-ui -S
  3. vue-cli初始化一个项目:vue init webpack
  4. vue在构建的时候的date是全局的,并且与使用vue.*时候的对象实体是一个。

    // 该对象被加入到一个 Vue 实例中
    var vm = new Vue({
      data: data
    })
    // 他们引用相同的对象!
    vm.a === data.a // => true
    // 设置属性也会影响到原始数据
    vm.a = 2
    data.a // => 2
    // ... 反之亦然
    data.a = 3
    vm.a // => 3
  5. 生命周期
  6. v-once
  7. v-html
  8. v-bind
    HTML
    <!-- 完整语法 -->
    <a v-bind:href="url">...</a>
    <!-- 缩写 -->
    <a :href="url">...</a>
  9. v-show

    <h1 v-show="ok">Hello!</h1>
  10. v-on
    HTML
    <!-- 完整语法 -->
    <a v-on:click="doSomething">...</a>
    <!-- 缩写 -->
    <a @click="doSomething">...</a>
  11. JavaScript表达式可以直接使用
    JavaScript
    {{ number + 1 }}
    {{ ok ? 'YES' : 'NO' }}
    {{ message.split('').reverse().join('') }}
    <div v-bind:id="'list-' + id"></div>
  12. 监听器(注意例子中的去抖动)

    虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

    <div id="watch-example">
    <p>
        Ask a yes/no question:
        <input v-model="question">
      </p>
      <p>{{ answer }}</p>
    </div>
    <!-- 因为 AJAX 库和通用工具的生态已经相当丰富,Vue 核心代码没有重复 -->
    <!-- 提供这些功能以保持精简。这也可以让你自由选择自己更熟悉的工具。 -->
    <script src="https://cdn.jsdelivr.net/npm/axios@0.12.0/dist/axios.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/lodash@4.13.1/lodash.min.js"></script>
    <script>
    var watchExampleVM = new Vue({
      el: '#watch-example',
      data: {
        question: '',
        answer: 'I cannot give you an answer until you ask a question!'
      },
      watch: {
        // 如果 `question` 发生改变,这个函数就会运行
        question: function (newQuestion) {
          this.answer = 'Waiting for you to stop typing...'
          this.getAnswer()
        }
      },
      methods: {
        // `_.debounce` 是一个通过 Lodash 限制操作频率的函数。
        // 在这个例子中,我们希望限制访问 yesno.wtf/api 的频率
        // AJAX 请求直到用户输入完毕才会发出。想要了解更多关于
        // `_.debounce` 函数 (及其近亲 `_.throttle`) 的知识,
        // 请参考:https://lodash.com/docs#debounce
        getAnswer: _.debounce(
          function () {
            if (this.question.indexOf('?') === -1) {
              this.answer = 'Questions usually contain a question mark. ;-)'
              return
            }
            this.answer = 'Thinking...'
            var vm = this
            axios.get('https://yesno.wtf/api')
              .then(function (response) {
                vm.answer = _.capitalize(response.data.answer)
              })
              .catch(function (error) {
                vm.answer = 'Error! Could not reach the API. ' + error
              })
          },
          // 这是我们为判定用户停止输入等待的毫秒数
          500
        )
      }
    })
    </script>
  13. Class样式
    • 对象语法,简单传值
      HTML
      <div class="static"
      v-bind:class="{ active: isActive, 'text-danger': hasError }">
      </div>
    • 对象语法,传对象
      HTML
      <div v-bind:class="classObject"></div>

      JavaScript
      data: {
      classObject: {
      active: true,
      'text-danger': false
      }
      }

      或者计算属性
      JavaScript
      data: {
      isActive: true,
      error: null
      },
      computed: {
      classObject: function () {
      return {
      active: this.isActive && !this.error,
      'text-danger': this.error && this.error.type === 'fatal'
      }
      }
      }
    • 数组语法
      HTML
      <div v-bind:class="[activeClass, errorClass]"></div>

      JavaScript
      data: {
      activeClass: 'active',
      errorClass: 'text-danger'
      }

      三元表达式
      HTML
      <div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>

      数组语法中也可以使用对象语法
      HTML
      <div v-bind:class="[{ active: isActive }, errorClass]"></div>
  14. 内联样式
    HTML
    <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>

    JavaScript
    data: {
    activeColor: 'red',
    fontSize: 30
    }

    绑定对象

    <div v-bind:style="styleObject"></div>


    data: {
    styleObject: {
    color: 'red',
    fontSize: '13px'
    }
    }

    当 v-bind:style 使用需要添加浏览器引擎前缀的 CSS 属性时,如 transform,Vue.js 会自动侦测并添加相应的前缀。
  15. 条件渲染
    HTML
    <div v-if="type === 'A'">
    A
    </div>
    <div v-else-if="type === 'B'">
    B
    </div>
    <div v-else-if="type === 'C'">
    C
    </div>
    <div v-else>
    Not A/B/C
    </div>
  16. v-if VS v-show
    v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。

    v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

    相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

    一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。

  17. v-ifv-for 一起使用时,v-for 具有比 v-if 更高的优先级。
  18. v-for
    • 注意,index为索引
      HTML
      <ul id="example-2">
      <li v-for="(item, index) in items">
      {{ parentMessage }} - {{ index }} - {{ item.message }}
      </li>
      </ul>
    • 用 v-for 通过一个对象的属性来迭代

      <ul id="v-for-object" class="demo">
      <li v-for="value in object">
      {{ value }}
      </li>
      </ul>


      new Vue({
      el: '#v-for-object',
      data: {
      object: {
      firstName: 'John',
      lastName: 'Doe',
      age: 30
      }
      }
      })
    • 提供第二个的参数为键名

      <div v-for="(value, key) in object">
      {{ key }}: {{ value }}
      </div>
    • 第三个参数为索引

      <div v-for="(value, key, index) in object">
      {{ index }}. {{ key }}: {{ value }}
      </div>
    • 尽量给出一个有唯一值的属性作为key

      <div v-for="item in items" :key="item.id">
      <!-- 内容 -->
      </div>
  19. 以下方法会通过改变值来触发视图更新
    • push()
    • pop()
    • shift()
    • unshift()
    • splice()
    • sort()
    • reverse()
  20. 注意事项

    由于 JavaScript 的限制,Vue 不能检测以下变动的数组:

    • 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue

    • 当你修改数组的长度时,例如:vm.items.length = newLength

    为了解决第一类问题,以下两种方式都可以实现和 vm.items[indexOfItem] = newValue 相同的效果,同时也将触发状态更新:

    // Vue.set
    Vue.set(example1.items, indexOfItem, newValue)
    // Array.prototype.splice
    example1.items.splice(indexOfItem, 1, newValue)

    为了解决第二类问题,你可以使用 splice:

    example1.items.splice(newLength)
  21. TODO 对象更改属性检测

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值