开发者问题收集

Vue 变量在组件内部未定义

2020-04-15
222

我的变量在组件内未定义,有人可以帮助我吗?

变量是:“professor.nome”

基本上,我在 carregarProfessores() 方法内加载了我的“professor”变量。

这是在一切之后加载 Titulo 组件的方法吗?

这是未加载变量的组件:

    <Titulo
      :texto="
        professorId !== undefined
          ? 'Professor: ' + professor.nome
          : 'Todos os alunos'
      "
    />

如果我尝试像这样访问变量,则可以工作:

<h1>{{ professor.nome }}</h1>

这是我的 Vue 代码:

export default {
  components: {
    Titulo,
  },
  data() {
    return {
      professorId: this.$route.params.prof_id,
      nome: "",
      alunos: [],
      professor: [],
    };
  },
  created() {
    if (this.professorId) {
      this.carregarProfessores();

      this.$http
        .get("http://localhost:3000/alunos?professor.id=" + this.professorId)
        .then((res) => res.json())
        .then((alunos) => (this.alunos = alunos));
    } else {
      this.$http
        .get("http://localhost:3000/alunos")
        .then((res) => res.json())
        .then((alunos) => (this.alunos = alunos));
    }
  },
  props: {},
  methods: {
    carregarProfessores() {
      this.$http
        .get("http://localhost:3000/professores/" + this.professorId)
        .then((res) => res.json())
        .then((professor) => {
          this.professor = professor;
        });
    },
  },
};

这是 Titulo 组件:

<template>
  <div>
    <h1>{{ titulo }}</h1>
  </div>
</template>

<script>
export default {
  props: {
    texto: String,
  },
  data() {
    return {
      titulo: this.texto,
    };
  },
};
</script>
3个回答

问题是您的 Titulo 组件是有状态的。它获取 prop texto 的初始值的副本,但不会在其更改时更新它。

首先无需获取副本,只需在模板中使用 prop 本身即可:

<template>
  <div>
    <h1>{{ texto }}</h1>
  </div>
</template>

<script>
export default {
  props: {
    texto: String
  }
};
</script>
skirtle
2020-04-15

尝试

data() {
    return {
      professorId: this.$route.params.prof_id || null, // changed
      nome: "",
      alunos: [],
      professor: null, // changed
    };
  },

然后

<Titulo
      :texto="
        professorId && professor
          ? 'Professor: ' + professor.nome
          : 'Todos os alunos'
      "
    />
NRiebesel
2020-04-15

根据您的数据。 教授是数组,因此您无法直接访问 nome。

因此,您有教授数组上的迭代器或

<h1>{{ professor[0].nome }}</h1>
Ashish Mehta
2020-04-15