2016-03-10 3 views
0

Я создал специальную директиву боковой панели. Он работает нормально, когда он загружается там, где должен. То, что работает неправильно, это теги. Их предполагаемое поведение - это поведение дроупауна, где при нажатии они показывают свои внутренние элементы. Он работает правильно, когда код вставлен напрямую, но не тогда, когда директива вызывается с кодом внутри другого html-файла. Я взял 2 скриншоты, чтобы показать разницу между использованием класса = «страница-врезку» в файле, который содержит HTML код директивы и использовать его на файл «корень»:Пользовательская директива AngularJS, теряющая свойства корня

inside the directive

outside

Довольно ясно, что несколько свойств выделенных строк не применяются к первому.

Пожалуйста, помогите, поскольку мне это нужно как «частичное» представление, которое будет использоваться на нескольких страницах.

EDIT: Директива Код:

app.directive('sidebar', function() { 
    return { 
     restrict: 'E', 
     templateUrl: "/app/views/sidebar.html" 
    }; 
}); 

EDIT2:

Добавление этого в пост, так как это может привести к путанице от того, как я объяснил:

я вижу, где путаница может быть, но они разные. < sidebar> - это созданная мной директива. class = "page-sidebar" из шаблона, который я использую, и является тем, что форматирует все на свое место. Я попытался вставить class = "page-sidebar" в директиву, чтобы увидеть, будет ли это работать, но они разные.

EDIT3:

Чтобы прояснить ситуацию, я надеюсь: оба фото показать боковую панель работает. Я знаю, что это элемент, и поэтому я использую < sidebar>, он работает, это не проблема. Проблема в том, что когда я его использую, содержимое, такое как Dropdowns (как показано на втором рисунке), не работает, когда я нажимаю на них, тогда как содержимое элемента просто вставляется в index.html, а не в sidebar.html , оно работает.

enter image description here

enter image description here

EDIT4:

Нашли проблему, но до сих пор нет решения. Я изменил некоторые вещи, а вместо боковой панели теперь виджеты. Боковая панель теперь всегда загружается, и содержимое страницы загружается в зависимости от URL-адреса. Это помогло мне отследить вопрос:

$(".owl-carousel").owlCarousel({mouseDrag: false, touchDrag: true, slideSpeed: 300, paginationSpeed: 400, singleItem: true, navigation: false,autoPlay: true}); 

предыдущий код в plugins.js файле, который включен в HTML. По какой-то причине эта строка НЕ ​​запускается при загрузке страницы. Когда я запустил эту строку на консоли хром, появился соответствующий виджет.

По какой-то причине содержимое js не запускается при загрузке страницы.

+0

Не могли бы вы опубликовать некоторые из ваших директивных кодов? Вероятно, это что-то в директиве ... –

+0

Отредактировано в оригинальном посте! – Forget

+0

используйте 'ограничение = 'C'', и если вы используете' ограничение:' E ', используйте тег элемента i.e '' –

ответ

0

Ваша основная проблема - restrict: 'E',, что ограничивает ее элементами. Это объясняет, почему он работает для <sidebar>, но не для <div class="sidebar">. Если вы хотите использовать классы, вам необходимо изменить его на restrict: 'C'.

Другая проблема заключается в том, что, когда вы пытаетесь использовать директиву как класс, вы используете class="page-sidebar", а не class="sidebar".

Для директив см. docs.

+0

Что мне делать? Я удалил его, и он все еще не работает ... – Forget

+0

@Forget - обновил ответ ... вы хотите «ограничить:« C », если вы хотите, чтобы ваша директива применима только к классам. –

+0

Я вижу, где может быть замешательство, но это разные вещи. - это созданная мной директива. class = "page-sidebar" из шаблона, который я использую, и является тем, что форматирует все на свое место. Я попытался вставить class = "page-sidebar" в директиву, чтобы увидеть, будет ли это работать, но это разные вещи! – Forget

0

От угловой документации:

Ограничить параметр обычно устанавливается:

  • 'A' - только матчи имени атрибута
  • 'E' - только совпадает с именем элемента
  • «C '- соответствует только названиям классов
  • ' M '- матчи comment Все эти ограничения могут быть сгруппированы по необходимости:

«AEC» - соответствует либо атрибута или элемента или имя класса

+0

проверьте EDIT3. Я понял, что у всех одинаковая путаница, и я не верю, что это проблема! – Forget

0

Объект определения директивы для sidebar совершенно ясно сказано, что он будет относиться к узлу DOM с именем тега sidebar, чтобы сделать шаблон директивы из-за restrict : 'E' Недвижимость.

Так что используйте директиву как узел HTML, а НЕ в классе (так как для свойства restrict должно быть установлено значение C).

<sidebar></sidebar> 
+0

Я отредактировал его в OP, но вот что происходит: элемент боковой панели был создан мной. Он работает правильно, это сделано. Боковая панель страницы - это класс, созданный на странице шаблона admin, которую я использую. Это из-за css и всего этого. Проблема заключается в том, что содержимое sidebar.html находится внутри индекса, оно работает правильно, однако, когда я перемещаю содержимое в sidebar.html и просто использую элемент de < sidebar >, он показывает правильные значения ul и li и прочее, но выпадающие списки, например, не работают. Надеюсь, я смогу прояснить это! – Forget

+0

@Forget, я полагаю, что выпадающие списки могут не работать, потому что они не могут получить доступ к функциям из родительской области. Можете ли вы добавить свой угловой код, который задействован во всем сценарии, т. Е. _controller_ или что-то еще, что имеет логику для выпадающих кнопок. Между тем, мне нужно взглянуть на структуру '/ app/views/sidebar.html'. –

+0

Проверьте мои изменения, пожалуйста. Я изменил структуру, так как теперь боковая панель «исправлена», и содержимое страницы загружается в зависимости от URL-адреса. У меня есть некоторые виджеты из шаблона, который работал до этого, но теперь не работает. Любые вопросы, которые могут помочь, пожалуйста, сделайте это! – Forget

Смежные вопросы