2017-02-12 3 views
1

Я пытаюсь заменить все \n на <br> в переменной. Почему я не могу отправить переменную как параметр функции методу из шаблона? Консоль говорит Uncaught TypeError: Cannot read property 'replace' of undefined.Как передать переменную в качестве параметра методу в одном файле?

Я думаю, что он называет метод n2br, но не может отправлять переменную в качестве параметра.

Может ли кто-нибудь знать, как решить эту проблему?

<template> 
    <div id="iletisim" class="page"> 
     <div>{{ n2br(iletisim.address) }}</div> 
    </div> 
</template> 

<script> 
    export default { 
     name: "iletisim", 
     data() { 
      return { 
       iletisim: "" 
      } 
     }, 
     methods: { 
     fetch: function() { 
      this.$http.get(this.site.apiPath + this.site.currentLangCode + "/" +this.$route.params[1]).then(response => { 
       this.iletisim = response.body.content; 
      }, 
      response => { 
      // error callback 
      }); 
      n2br: function(text) { 
       text = text.replace(/(?:\r\n|\r|\n)/g, '<br />'); 
       return text; 
      } 
     }, 
     beforeMount() { 
      this.fetch() 
     }  
    } 
</script> 

ответ

2

Когда это первоначально инстанцирован ваши данные «iletism» является строкой. Строка не имеет свойства адреса. Таким образом, iletism.address не определен.

Когда это прибывает в вашу функцию n2br, он вызывает undefined.replace. Который не существует, поэтому замена не существует при неопределенной ошибке.

Так что либо охраняйте это в методе n2br, либо задайте значение по умолчанию для iletism, чтобы существовал адрес, но это пустая строка.

Вы можете выполнить одно и то же с вычисленным свойством, но то же самое верно, что вам понадобится базовый регистр, заданный в данных или в вычисленном методе.

+0

nope. это не строка. Fetch Part заботится о своем содержании. – kastelli

+0

Когда это первый запуск, это будет строка. Зайдите в console.log, чтобы подтвердить его значение. – Austio

+0

Я добавил часть извлечения в код вопроса. Также я проверил шаблон с '{{iletisim.address}}', и это значение верно. – kastelli

1

Хмм, я не думаю, что вам нужно отправить его честно. Похоже, вам нужно вычислить свойство.

Допустим, ваш метод выборки задает свойство данных iletisim.

В шаблоне вы могли бы сделать это:

<div>{{ computedIletisim }}</div> 

А затем в компоненте после методы добавить вычислен

export default { 
    ... 
    methods: { 
     ... 
    }, 
    computed: { 
     computedIletisim: function() { 
     return this.iletisim.address.replace(/(?:\r\n|\r|\n)/g, '<br />'); 
     } 
    } 
... 
} 
+0

Мне нужно отправить, потому что у меня есть несколько переменных для обработки (n2br) – kastelli

+1

Хорошо, я согласен с @Austio, вам нужно как-то по умолчанию его использовать, потому что когда адрес монтирования компонентов не существует, потому что илетизм - это строка. Попробуйте установить iletism как объект в данных, а затем в вашем методе проверьте, установлен ли адрес. Если вы хотите протестировать это, поставьте console.log() в monted и log ilethism. – peaceman

+0

iletisim означает «контакт» на турецком языке, кстати :) – kastelli

Смежные вопросы