vue.js里面 axios去后台获取数据(异步),但是页面开始渲染了{{info.name}}
<div id="student-info" class="header-info clear-both">
<div class="header-box clear-both">
<!-- 头像 -->
<a class="img_href" href="#">
<img class="my-head" v-bind:src="imgUrl" />
</a>
<!-- 个人信息 -->
<div class="my-info clear-both">
<div class="top-info clear-both">
<span class="nickname" v-if="name">{{name}}</span>
<span id="student_age" class="age">{{age}}</span>
<span class="gender">
<img class="gender_img" v-if="gender == '1'" src="/Public/images/icons/gender_male.png" />
<img class="gender_img" v-if="gender == '2'" src="/Public/images/icons/gender_male.png" />
</span>
</div>
<div class="user-id-info text-line-height clear-both">
ID: S{{identifier}}
</div>
<div class="user-status text-line-height clear-both">
<i class="fa fa-envelope"></i>
<span class="user-tips-text">{{statusText}}</span>
</div>
<div class="user_address text-line-height clear-both">
<i class="fa fa-map-marker"></i>
<span class="user-tips-text">{{address}}</span>
</div>
</div>
<!-- 设置 -->
<div class="settings">
<img src="/Public/img/icons/settings.png" />
<span>SETTINGS</span>
</div>
</div>
</div>
studentInfo:function(){
var student_Info = new Vue({
el:"#student-info",
data:{
name:"",
gender:"",
identifier:"",
dob:"",
age:"",
status:"",
statusText:"",
address:"",
imgUrl:"",
},
methods:{
getStudentInfo:function(){
var oIdentifier = getCookie('identifier');
var params = new URLSearchParams();
params.append('identifier',oIdentifier);
axios.post('/Student/student_base_info',params).then(response => {
//console.log(response.data);
this.name = response.data.name;
this.identifier = response.data.identifier;
this.age = myAge(response.data.dob);
this.gender = response.data.gender;
this.status = response.data.status;
this.statusText = courseStatus(this.status);
this.imgUrl = "/Upload/avatar/100_100/"+response.data.openid+".jpg"
});
},
},
created(){
this.getStudentInfo();
},
});
},
当axios 去后台取数据的时候,页面会先渲染这个东西
等 date返回
的时候才正常替换(第二遍渲染)!
请问大佬们是怎么解决的这个问题
布局乱了不说,给人感觉加载两次不是很爽啊
(不要说改成同步的 ~微笑~)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
去看下 v-clock 应该能帮助你
1,为何会二次渲染
直接引入vue.js才会有这种问题。
浏览器拿到的.html文件里, 代码包含{{}}, 浏览器肯定会先渲染为{{}}。
vue.js执行时会遍历DOM里, 把{{}}及v-指令找出来, 进行双向绑定。
在执行你写的异步代码时, 请求后会通过vue.js将DOM里的{{}}及里面的内容进行替换, 再次渲染。
2, 如何解决
在你这种情况下, 二次渲染不可避免。你能做的就是让第一次渲染对用户不可见。
思路就是, 第一次渲染时, 设置元素display: none; 第二次渲染时, 设置元素display: visible。
vue.js提供了v-cloak指令。该指令的作用是, 在vue.js首次为{{}}赋值时, 将其display设置为visible。
结论:
1, <div id="student-info" class="header-info clear-both" v-cloak>
2, 在你的css中添加[v-cloak] { display: none; }
绑定了数据的地方使用v-if
比如