Vue: Как мне отрендерить динамический компонент на основе родительских данных?

Вы должны поместить полные пути в свой crontab. Это самый безопасный вариант. Если вы не хотите этого делать, вы можете поместить скрипт-оболочку вокруг своих программ и установить там PATH.

, например

01 01 * * * command

, становится:

01 01 * * * /full/path/to/command

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

EDIT:

Если вы не знаете, где команда, которую вы хотите выполнить which <command> из вашей оболочки, и она сообщит вам путь.

EDIT2:

Итак, как только ваша программа запущена, первое, что он должен сделать, это установить PATH и любую другую требуемую переменную (например, LD_LIBRARY_PATH) на значения, которые необходимые для запуска сценария. В основном вместо того, чтобы думать о том, как изменить среду cron, чтобы сделать ее более подходящей для вашей программы / скрипта, сделайте ваш скрипт обработанной средой, которую он задал, установив соответствующий, когда он начнется.

1
задан Qbessi 15 January 2019 в 17:33
поделиться

2 ответа

Как уже упоминалось в комментарии, вы можете проанализировать URL в методе с помощью директивы v-bind:is . Вы, наверное, уже поняли это, но вот моя быстрая попытка.

const content = {
  content: [{
    '@id': '4effb045',
    '@type': 'http://url/images.json',
    _meta: {
      name: 'TestingImage'
    }
  }, {
    '@id': '4effb046',
    '@type': 'http://url/videos.json',
    _meta: {
      name: 'TestingVideo'
    }
  }]
}

new Vue({
  el: '#app',

  data() {
    return {
      content
    }
  },

  methods: {
    extractName(content) {
      const [name] = /[^\/]*(?=\.\w+$)/.exec(content['@type']);

      return name;
    }
  },

  components: {
    Images: {
      template: '<img src="https://via.placeholder.com/150x45" />'
    },

    Videos: {
      template: '<div>Some video component</div>'
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <component 
    v-for="content in content.content" 
    :is="extractName(content)" 
    :key="content['@id']">
  </component>
</div>

Кстати, я бы не советовал использовать зарезервированные слова HTML в качестве имен компонентов (как в вашем случае <video> ), поскольку он может не скомпилироваться. Смотрите эту связанную проблему на GitHub.

[Vue warn]: не используйте встроенные или зарезервированные элементы HTML в качестве идентификатора компонента: диалог

0
ответ дан jom 15 January 2019 в 17:33
поделиться

Ваш подход правильный. Вы можете использовать директиву is для вызова ваших компонентов. Это лучший способ.

Как вы и просили, вам нужен метод в Page.vue для анализа вашего @type.

methods: {
    parseType: function(type) {
        let typeParts = type.split("/")
        let filenameParts = typeParts[typeParts.length - 1].split('.')
        let parsedType = filenameParts[0]
        return parsedType 
    }
}

Теперь вы можете использовать эту функцию в своем шаблоне.

<component v-for="content in content.content" :is="parseType(content.@type)" :key="content.id"></component>
0
ответ дан Raphael Parreira 15 January 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: