положить переменную vue с установленным на секции ('title') - PullRequest
0 голосов
/ 16 февраля 2019

У меня проблема с отображением переменной vue на шаблоне блейда

my layouts / master.blade.php

<html>
    <head>
        <title>@yield('title') | My company</title>
.....

news.blade.php

@extends('layouts.master')

<div id="pagetitle">
@section('title', @{{pagetitle}} )
</div>

@section('content')
....
@endsection

resources / js / news.js

new Vue({

    el: '#pagetitle',

    data: {
        pagetitle:'',
    },

    mounted() {
        this.fetchArticlesPage();
    },

    methods: {
        fetchArticlesPage(page_url) {
            page_url = '/api/articles/news';
            fetch(page_url)
            .then(res => res.json())
            .then(res => this.pagetitle = res.page_title)
            .catch(err => console.log(err));
        },

    }
});

и эти данные ответа от контроллера с jsonResource

{
 "links": {
    "first": "http://localhost:8000/api/articles/news?page=1",
    "last": "http://localhost:8000/api/articles/news?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "http://localhost:8000/api/articles/news",
    "per_page": 3,
    "to": 3,
    "total": 3
  },
  "page_title": "News"
}

я получил неожиданную синтаксическую ошибку {

, если я надену @раздел ('content') вот так

@section('content')
   <div id="pagetitle">
     @{{pagetitle}}
   </div>
@stop

это хорошо и покажет данные «Новости», пожалуйста, помогите, я новичок в программировании vue и laravel

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

вы можете попробовать этот

@ раздел ('title', @pagetitle)

0 голосов
/ 17 февраля 2019

Директивы шаблона Blade обрабатываются на сервере, а клиенту отправляется ответ.

После этого директивы шаблона Vue обрабатываются в браузере.

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

   <div id="pagetitle">
     {{pagetitle}}
   </div>

Программа Vue, запущенная в браузере, затемвыполняется и интерполирует переменные в этом шаблоне.

Для предыдущего примера

@section('title', @{{pagetitle}})

приведет к ошибке на сервере, когда он попытается скомпилировать раздел, поскольку второй параметр незадается в виде строки.

Эту ошибку можно исправить, заключив в кавычки Vue усы .

@section('title', '@{{pagetitle}}')

РЕДАКТИРОВАТЬ : {{pagetitle}} не скомпилировано - находится в заголовке документа

Созданный экземпляр Vue монтируется в элемент, содержащийся в теле.По этой причине компиляция происходит только в дереве документа элемента, к которому подключен экземпляр Vue.

Я предлагаю создать отдельный экземпляр Vue для управления заголовком документа.например,

const helmet = new Vue({
    el: 'head',
    data: {
        pagetitle:'',
    },

    mounted() {
        this.fetchArticlesPage();
    },

    methods: {
        fetchArticlesPage(page_url) {
            page_url = '/api/articles/news';
            fetch(page_url)
            .then(res => res.json())
            .then(res => this.pagetitle = res.page_title)
            .catch(err => console.log(err));
        },

    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...