Поэтому я работаю над личным портфолио для себя с несколькими проектами, которые я сделал для своего встроенного веб-класса. Поскольку мы практикуем веб-сайты и веб-сайты, ориентированные на данные, в классе, мой профессор хотел, чтобы мы делали что-то подобное, помещая наши данные в хранилище данных на основе облаков или в 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;
}
});
});
Я не знаю этого папы, но я думаю, что это асинхронный вызов, поэтому он выходит за пределы угловой циклы. Попробуй это
complete: function(results) {
$scope.projects = results.data;
$scope.$apply();
}
Угловой имеет свой собственный цикл событий, который запускается каждый раз, когда Angular знает, что он должен работать. Это происходит, когда код, который изменяет состояние, выполняется в пределах Углового. Когда цикл работает, все переменные, привязка и рендеринг также обновляются.
Здесь вы используете внешнюю библиотеку Papa, которая просто запускает запрос Ajax. Запрос отправляется в пределах Углового, но обратный вызов результата обрабатывается снаружи из-за асинхронности. Поэтому вы должны заставить Angular обновить свои данные. Какой $ scope. $ Apply() делает, чтобы заставить цикл цикла обновляться только для этого контроллера.
Не забудьте сделать это каждый раз, когда вы запускаете код, который не находится внутри Angular, но будет взаимодействовать с Angular. Это справедливо, например, для событий "onclick" или jQuery или только для любого кода вне области "Угол".