Ng-include не работает внутри шаблонов ng-view

Структура файла:

--app
  --partials
    --navbar.html
 --submit
    --submission.html
index.html

У меня есть ng-include внутри моего submits.html:

<ng-include src="'app/partials/navbar.html'" ></ng-include>

Ничего не появляется. Однако, если я вставлю то же самое в index.html, появится панель навигации. Я подумал, что это может быть связано с относительными aphs к текущему html-файлу, поэтому я попробовал src="'../partials/navbar.html'" безуспешно.

Есть ли что-то особенное, что нужно сделать, чтобы ng-include отображался внутри шаблона ng-view?

Похожие вопросы, которые не помогли:


person Douglas Gaskell    schedule 28.09.2016    source источник
comment
Вы уверены, что шаблон загружается? Вы используете html5mode в маршрутизации?   -  person charlietfl    schedule 29.09.2016
comment
@charlietfl шаблон в ng-include даже не загружается, когда ng-include находится внутри ng-view.   -  person Douglas Gaskell    schedule 29.09.2016
comment
а шаблон загрузится без него? если так, то это действительно странно... но это больше похоже на то, что маршрут не работает. Вы можете добавить обработчик ошибок изменения маршрута, чтобы узнать   -  person charlietfl    schedule 29.09.2016
comment
Комментарий @charlietfl Дэвида об использовании ~/ сработал.   -  person Douglas Gaskell    schedule 29.09.2016
comment
нужно только /. В будущем ... простой способ проверить это в сети инструментов разработчика браузера ... там можно увидеть все запросы и пути. Вернул бы 404   -  person charlietfl    schedule 29.09.2016
comment
@charlietfl это было ложное срабатывание, я добавил ng-include в index.html на секунду, и хотя это сработало.   -  person Douglas Gaskell    schedule 29.09.2016
comment
посмотрите в сети инструментов разработчика и получите больше подсказок   -  person charlietfl    schedule 29.09.2016
comment
@charlietfl Да, вот откуда я знаю, что он вообще не загружается.   -  person Douglas Gaskell    schedule 29.09.2016
comment
Вы используете html5mode, и если да, то установили ли вы базовый тег? Опять же ... подсказки находятся в сети инструментов разработчика   -  person charlietfl    schedule 29.09.2016
comment
Да и да. Я также связал размещение navbar.html в корне и безуспешно ссылался на него. :/   -  person Douglas Gaskell    schedule 29.09.2016
comment
все, что я могу сказать еще раз, это проверить сами запросы   -  person charlietfl    schedule 29.09.2016
comment
Файл вообще не запрашивается, если ng-include не находится в index.html.   -  person Douglas Gaskell    schedule 29.09.2016
comment
тогда маршрут, вероятно, не работает, вероятно ... какой-либо запрос на шаблон маршрута? В соответствии с моим предыдущим предложением добавьте обработчик ошибок изменения маршрута и узнайте, что он вам говорит.   -  person charlietfl    schedule 29.09.2016
comment
Маршруты маршрутов между шаблонами просто прекрасны, я могу переходить с одного маршрута на другой, и их шаблоны загружаются. Никаких ng-include внутри них нет, и нет запросов на файлы в ng-include src. Извините, у меня есть обработчик $routeChangeError и ошибок нет.   -  person Douglas Gaskell    schedule 29.09.2016
comment
вы пробовали разные браузеры? тег ng-inclde в живом html?   -  person charlietfl    schedule 29.09.2016
comment
Я не пробовал другой браузер, тега ng-include нет в HTML. Я, вероятно, открою награду за это, как только смогу, все это имеет для меня очень мало смысла. Я нашел рабочие примеры, которые ничем не отличаются.   -  person Douglas Gaskell    schedule 29.09.2016
comment
о да... возможно, он был заменен комментарием в живом HTML. angular делает это с некоторыми директивами   -  person charlietfl    schedule 29.09.2016
comment
О, Боже. Он работает в Edge, но не в Chrome. Chrome 53.0.2785.116 м, если быть точным. Пробую firefox после загрузки   -  person Douglas Gaskell    schedule 29.09.2016
comment
угловая версия довольно свежая?   -  person charlietfl    schedule 29.09.2016
comment
Угловой v1.5.8. Полностью очистил кеш Google Chromes и все остальные данные, и теперь он работает. Это кажется... похоже на потенциальную проблему.   -  person Douglas Gaskell    schedule 29.09.2016
comment
простое исправление для этого - отключить кеш в инструментах разработчика... всегда рекомендуется   -  person charlietfl    schedule 29.09.2016
comment
Обязательно сделаю, вы очень помогли. Вы можете просто ответить очисткой кеша, так как это сработало, и я приму это. Будет ли это проблемой для пользователей? Ради интереса я изменил расположение ng-include в файле, а расположение навигационной панели не изменилось, пока я не очистил кеш.   -  person Douglas Gaskell    schedule 29.09.2016


Ответы (2)


Angular не может найти «приложение» в пути к каталогу. Попробуйте добавить тильду в начале:

<ng-include src="'app/partials/navbar.html'" ></ng-include>

Должно быть:

<ng-include src="'~/app/partials/navbar.html'" ></ng-include>
person Dave Kanter    schedule 28.09.2016
comment
Дэйв, двойная кавычка необходима для того, чтобы ng-include работал с путем, поскольку я передаю путь в виде строки. Без него не работает вообще, нигде. Я уже упоминал, что это работает, только не внутри ng-view - person Douglas Gaskell; 29.09.2016
comment
это неверно src в этом случае читает выражение... дополнительная кавычка необходима для обозначения строки - person charlietfl; 29.09.2016
comment
О, крики, ты прав. Итак, мое второе подозрение заключается в том, что документ Angular не может видеть путь к приложению. Индекс может видеть это, потому что два файла находятся на одном уровне, но, возможно, вам нужна тильда или косая черта в начале: ‹ng-include src='/app/partials/navbar.html' ›‹/ng-include› или ‹ng- включить src='~/app/partials/navbar.html' ›‹/ng-include› - person Dave Kanter; 29.09.2016
comment
@DaveKaye это была тильда! Я никогда не думал попробовать это, я пробовал косую черту, но не тильду. Что это вообще делает? - person Douglas Gaskell; 29.09.2016
comment
~/ переходит от базового пути сервера. - person Dave Kanter; 29.09.2016
comment
браузер игнорирует тильду... это на стороне сервера mvc - person charlietfl; 29.09.2016
comment
Да, у браузера есть собственная версия расположения root, но многие дополнительные языки (Perl, PHP, Angular) принимают тильду в качестве базового пути в соответствии со стандартом Unix, начиная с конца 70-х годов. - person Dave Kanter; 29.09.2016
comment
@DaveKaye Мне очень жаль. Это было ложное срабатывание, прямо перед тем, как я проверил это, я добавил его обратно в index.html, чтобы проверить что-то еще:/ - person Douglas Gaskell; 29.09.2016
comment
Ну, я все еще держу пари, что это что-то вроде этого. Вы определили свои пути к Angular? - person Dave Kanter; 29.09.2016
comment
@DaveKaye Я определил пути routeProvider, если вы это имеете в виду. Вот как я попадаю на страницу отправки. - person Douglas Gaskell; 29.09.2016
comment
Вы получаете сообщение об ошибке в консоли JS? Можете ли вы опубликовать свой код в Plunker? - person Dave Kanter; 29.09.2016
comment
Ошибок нет, запроса на файл тоже нет, я не могу опубликовать рабочий код в плункере, не поделившись внутренним кодом. Хотя я нашел этот plunkr, который делает именно то, что я пытаюсь сделать, за исключением того, что он работает. Теперь ломаю голову над этим. plnkr.co/edit/XaPLhjQPUBgZZryzFW1U?p=preview - person Douglas Gaskell; 29.09.2016
comment
В планке все файлы находятся на одном уровне. Помогает ли резервное копирование в приложение? ../../приложение/и т.д... - person Dave Kanter; 29.09.2016

Проблема оказалась в кеше моего браузера в Google Chrome. ng-include не отображался в HTML, пока я вручную не очистил кеш. Каждый раз, когда ng-include изменяется или перемещается в этом файле, мне приходится очищать кеш, в этом нет необходимости, если он находится в index.html.

После некоторого тестирования этой проблемы не существует в Edge, но она существует в Firefox.

Версия Chrome: 53.0.2785.116 м

person Douglas Gaskell    schedule 29.09.2016