Vue面试题(二)

1.计算属性如何使用
    一般我们在写vue的时候,在模板内写的表达式非常便利,它运用于简单的运算,但是他也有一些复杂的逻辑,包括运算、函数调用等,那么就用到了计算属性,他依赖于data中数据变化的  data 中数据变化的时候    计算属性就会重新执行,视图也会更新。
2.计算属性的 set  get 如何使用
    每一个计算属性都包含一个getter 和一个setter ;绝大多数情况下,我们只会用默认的getter 方法来读取一个计算属性,在业务中很少用到setter,所以在声明一个计算属性时,可以直接使用默认的写法,不必将getter 和setter 都声明。但在你需要时,也可以提供一个setter 函数, 当手动修改计算属性的值就像修改一个普通数据那样时,就会触发setter 函数,
3.watch 如何使用
    之前做一个H5的项目。需求是当用户在输入完了手机号和验证码之后,登录按钮才可以点击。 在没有使用vue之前,我们可能是通过input的change事件来判断,用户是否输入了内容,然后修改按钮的状态。现在有了vue,就省事了很多,我们只需要在watch中,监听数据模型的值改变即可。在input 上绑定一个v-mode="pass"绑定一个数据名, 在data里写入绑定的事件名,通过watch来监听输入内容的改变,但是如果,监听的是一个对象 里面有一个deep属性可以在选项参数中指定deep:true.也叫深度监听

<body>
    <!-- 侦听器 -->
    <div id="watch1">
        <p>Ask a yes/no question:
            <input type="text" v-model="question">
        </p>
        <p>{{ answer }}</p>
    </div>
    <!-- 因为 AJAX 库和通用工具的生态已经相当丰富,Vue 核心代码没有重复 -->
    <!-- 提供这些功能以保持精简。这也可以让你自由选择自己更熟悉的工具。 -->
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/axios.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
    <script>
        var vm = new Vue({
            el:'#watch1',
            data: {
                question: '',
                answer: 'I cannot give you an answer until you ask a question'
            },
            watch: {
                //如果question发生改变,函数就会运行
                question: function(newQuestion, oldQuestion){
                    this.answer = 'Waiting for you to stop typing...'
                    this.debouncedGetAnswer()
                }
            },
            created: function(){
                // 过Lodash限制操作pinlv的函数
                //在这里我们希望限制访问yesno。wtf/api的频率
                //AJAX请求直到用户输入完毕才会发出。
                this.debouncedGetAnswer = _.debounce(this.getAnswer,500)
            },
            methods: {
                getAnswer: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'
                    })
                }
            }

        })    
    </script>

4.计算属性和watch的区别
    在我们运用vue的时候一定少不了用计算属性computed和watch
    computed计算属性是用来声明式的描述一个值依赖了其它的值。当你在模板里把数据绑定到一个计算属性上时,Vue会在其依赖的任何值导致该计算属性改变时更新DOM。这个功能非常强大,它可以让你的代码更加声明式、数据驱动并且易于维护。
    watch监听的是你定义的变量,当你定义的变量的值发生变化时,调用对应的方法。
    就好在div写一个表达式name,data里写入num和lastname,firstname,在watch里当num的值发生变化时,就会调用num的方法,方法里面的形参对应的是num的新值和旧值,而计算属性computed,计算的是Name依赖的值,它不能计算在data中已经定义过的变量。
5.prop验证,和默认值
    我们在父组件给子组件传值的时候,为了避免不必要的错误,可以给prop的值进行类型设定,让父组件给子组件传值的时候,更加准确,prop可以传一个数字,一个布尔值,一个数组,一个对象,以及一个对象的所有属性。
    组件可以为props指定验证要求。如果未指定验证要求,Vue会发出警告
    比如传一个number类型的数据,用defalt设置它的默认值,如果验证失败的话就会发出警告。

猜你喜欢

转载自blog.csdn.net/qq_24767091/article/details/86072736
今日推荐