Содержимое, считываемое из файла .csv, иногда не отображается при загрузке страницы

0

Поэтому я работаю над личным портфолио для себя с несколькими проектами, которые я сделал для своего встроенного веб-класса. Поскольку мы практикуем веб-сайты и веб-сайты, ориентированные на данные, в классе, мой профессор хотел, чтобы мы делали что-то подобное, помещая наши данные в хранилище данных на основе облаков или в CSV файле. Я решил пойти с файлом.csv.

После создания файла.csv я использую Papa Parse для чтения в файлах CSV файла в удобном для использования формате для своего веб-сайта, а затем я использую угловое перемещение данных и размещение соответствующих частей на странице. Единственный раздел моего сайта, который использует эти данные, - это раздел проектов на главной странице.

Во всяком случае, моя проблема в том, что иногда, когда я загружаю страницу, либо в первый раз, когда я открываю URL-адрес, либо когда я перешел на домашнюю страницу со страницы about или на контакт, я заметил, что контент не работает Не появляюсь, и мне нужно перезагрузить страницу, чтобы отобразить gifs и текст. Вот несколько снимков экрана: как это должно выглядеть и как это выглядит. Я также включу ссылку на мой сайт в комментариях (потому что у меня еще нет репутации 10, поэтому я не могу разместить более двух ссылок), если вы хотите увидеть сами. (Это все еще идет работа, поэтому я признаю, что я немного смущен тем, что опубликую ее, но мне очень хотелось бы решить эту проблему).

Кроме того, здесь HTML, где эти данные используются для страницы:

<div class="projects">
<h1 class="projects-heading">Projects</h1>
<div class="container projectContainer" ng-repeat="project in projects">
    <div class="row">
        <div class="col-xs-12 col-md-6">
            <img class="projectGif" ng-src="{{project.gifUrl}}" ng-hide="projects.length < 0">
        </div>
        <div class="col-xs-12 col-md-6">
            <h4 class="project-info proj-title">{{project.title}}</h4>
            <p class="project-info proj-body">{{project.description}}</p>
            <a class="project-info" target="_blank" href="{{project.link}}">View the live site</a>
        </div>
    </div>
    <!-- Creates divier line between each separate project -->
    <hr class="project-split">
</div>

Мой контроллер:

app.controller('HomeController', function($scope){
Papa.parse("data/home.csv", {
    download: true,
    header: true,
    complete: function(results) {
        $scope.projects = results.data;
    }
});

});

  • 0
    мое портфолио: Students.washington.edu/jgb93/info343/portfolio/#/home
  • 0
    ng-hide = "projects.length <0". Эта строка кажется избыточной. В любом случае реализация кажется правильной. Это звучит как проблема времени. Не могли бы вы опубликовать свой контроллер?
Показать ещё 1 комментарий
Теги:
csv
papaparse

1 ответ

0
Лучший ответ

Я не знаю этого папы, но я думаю, что это асинхронный вызов, поэтому он выходит за пределы угловой циклы. Попробуй это

complete: function(results) {
    $scope.projects = results.data;
    $scope.$apply();
}

Угловой имеет свой собственный цикл событий, который запускается каждый раз, когда Angular знает, что он должен работать. Это происходит, когда код, который изменяет состояние, выполняется в пределах Углового. Когда цикл работает, все переменные, привязка и рендеринг также обновляются.

Здесь вы используете внешнюю библиотеку Papa, которая просто запускает запрос Ajax. Запрос отправляется в пределах Углового, но обратный вызов результата обрабатывается снаружи из-за асинхронности. Поэтому вы должны заставить Angular обновить свои данные. Какой $ scope. $ Apply() делает, чтобы заставить цикл цикла обновляться только для этого контроллера.

Не забудьте сделать это каждый раз, когда вы запускаете код, который не находится внутри Angular, но будет взаимодействовать с Angular. Это справедливо, например, для событий "onclick" или jQuery или только для любого кода вне области "Угол".

  • 0
    Похоже, это могло бы сработать - это немного сложно сказать, потому что единственное, что я могу сделать, чтобы проверить это, - это неоднократно обновлять страницу. Я буду продолжать тестирование. Но если это все-таки решит проблему, не могли бы вы объяснить, что добавила эта строка? @xbirkettx
  • 0
    Я отредактировал ответ
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню