Pds*_*Ink 5 javascript ajax json vue.js vuejs2
我在Vue上有这种奇怪的行为。我正在尝试渲染一个名为的对象的嵌套属性,descrizione并且可以正常工作!但是在控制台中,我收到了Vue的警告:
TypeError:无法读取未定义的属性“ descrizione”
这是我的代码:
的HTML
<div id="input-container">
{{modello.lineaGialla.descrizione}}
<input
class="styled-checkbox"
type="checkbox"
v-for="(servizio, index) in modello.lineaGialla.servizi"
v-bind:style="{left:servizio.x+'px',top:servizio.y+'px'}"
v-model="servizio.selected"
v-on:click="AddServizi(servizio.selected,servizio.nomeServizio)"
/>
<br/>
{{modello.lineaBlu.descrizione}}
<input
class=""
type="checkbox"
v-for="(servizio, index) in modello.lineaBlu.servizi"
v-model="servizio.selected"
v-on:click="AddServizi(servizio.selected,servizio.nomeServizio)"
/>
</div>
Run Code Online (Sandbox Code Playgroud)
JSON格式
{
"lineaGialla": {
"class":"gialla",
"selected": false,
"descrizione": "Questa è linea gialla",
"descrizione_breve":"descrizione breve gialla",
"descrizione_lunga":"descrizione lunga gialla",
"servizi": [
{"nomeServizio":"servizio_giallo1","descrizione":"qui desc <br/> breve","descrizione_lunga":"qui desc lunga","x":534,"y":83,"selected": false},
{"nomeServizio":"servizio_giallo2","descrizione":"qui desc <br/> breve","descrizione_lunga":"qui desc lunga","x":399,"y":259,"selected": false},
{"nomeServizio":"servizio_giallo3","descrizione":"qui desc <br/> breve","descrizione_lunga":"qui desc lunga","x":224,"y":262,"selected": false},
{"nomeServizio":"servizio_giallo4","descrizione":"qui desc <br/> breve","descrizione_lunga":"qui desc lunga","x":150,"y":502,"selected": false}
]
},
"lineaBlu": {
"class":"blu",
"selected": false,
"descrizione": "Questa è la linea blu",
"descrizione_breve":"descrizione breve blu",
"descrizione_lunga":"descrizione lunga blu",
"servizi": [
{"nomeServizio":"servizio_blu1","descrizione":"qui desc <br/> breve","descrizione_lunga":"qui desc lunga","x":534,"y":83,"selected": false},
{"nomeServizio":"servizio_blu2","descrizione":"qui desc <br/> breve","descrizione_lunga":"qui desc lunga","x":399,"y":259,"selected": false},
{"nomeServizio":"servizio_blu3","descrizione":"qui desc <br/> breve","descrizione_lunga":"qui desc lunga","x":224,"y":262,"selected": false},
{"nomeServizio":"servizio_blu4","descrizione":"qui desc <br/> breve","descrizione_lunga":"qui desc lunga","x":150,"y":502,"selected": false}
]
}
Run Code Online (Sandbox Code Playgroud)
JS 在这里,我使用一个自调用函数进行ajax调用:
var Callmodule = (function(){
var urljsonEntrata= "modello.json";
function getmodules(){
var req = $.ajax({
url: urljsonEntrata,
dataType: 'json',
type: 'GET'
});
req.done(function(data){
console.log('ajax to '+urljsonEntrata+' DONE');
console.log(data);
console.log('-----------------------------');
});
req.fail(function( jqXHR, textStatus, errorThrown ) {
console.log('ajax to '+urljsonEntrata+' FAIL');
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
console.log('-----------------------------');
});
return req;
}
return {
callGetmodules : getmodules(),
}
})();
var modello = {};
var VueApp = (function(){
//VUE JS
var Metromappa = new Vue({
el: '#metromappa',
data: {
modello:modello
},
methods:{
getModuleData : function(){
var req = Callmodule.callGetmodules;
var self = this;
req.done(function(data){
self.modello=data;
});
req.fail(function(jqXHR,textStatus,errorThrown){
console.log('richiesta andata a male')
});
}
Run Code Online (Sandbox Code Playgroud)
我要疯了。
这里的问题是,您正在异步检索数据,但是您已经定义了模板,该模板期望可以立即填充数据。
例如,在您的模板中,您具有以下代码。
modello.lineaGialla.descrizione
Run Code Online (Sandbox Code Playgroud)
但是,第一次渲染模板时,该模板lineaGialla 不存在或为undefined。但是,您正在尝试访问该descrizione值的属性,undefined但没有属性。这会导致您的错误。
为了解决问题,只需在拥有数据后才渲染模板,
<div v-if="modello.lineaGialla && modello.lineaBlu" id="input-container">
Run Code Online (Sandbox Code Playgroud)
或像这样保护访问:
{{modello.lineaGialla && modello.lineaGialla.descrizione}}
Run Code Online (Sandbox Code Playgroud)