2015-04-15 4 views
0

Я строю директиву Angular, которая отображает список элементов. Список элементов предоставляется функцией из собственной директивы scope. Ниже приведена базовая версия того, что я делаю (listOpts должен быть fn и не является статическими данными). Когда шаблон скомпилирован, listOpts не оценивается, поэтому шаблон возвращает пустой ul. Когда я помещаю listOpts fn в родительский controller, он оценивает его. Но я не хочу помещать функцию listOpts в контроллер из-за SRP (принцип единой ответственности); функция listOptsотносится к директиве list, а не к controller. Должно быть, я неправильно понимаю, как работают директивы или когда скомпилирован шаблон? Должен ли я помещать listOpts fn в controller fn с директивой?Угловая директива Функция вызова из собственного объема

@app.directive "list",() -> 
    restrict: "E" 
    link: (scope, el, attrs, ctrl) -> 
    scope.listOpts =()-> 
     return [1,2,3] 

    template: " 
    <ul ng-repeat='item in listOpts()'> 
     <li>{{item}}</li> 
    <ul> 
    " 
+0

ng-repeat не предназначен для работы таким образом, используйте статический список и при необходимости измените список. если вы все еще хотите попробовать это, просто добавив область действия: {} в свою директиву, следует изолировать ее для вас. – Delta

+0

@ Delta Я не думаю, что это проблема. Как я уже сказал, функция, обеспечивающая работу массива, работает, когда функция находится в родительской области, но не изнутри этой директивы. Как я уже сказал, я не могу использовать статический список. И я уже пытался добавить изолированную область, я думаю, проблема в том, что я не понимаю, как работает компиляция шаблонов для директив. – kittyminky

ответ

1

Пример кода при условии, кажется, работает как:

http://plnkr.co/edit/r589eFGZm8MOTk94GJtk?p=preview

просто модифицирована, чтобы использовать обычный JS, что вопрос здесь точно, вы можете воспроизвести проблему в plnkr.

.directive("list", function() { 
    return { 
    restrict: "E", 
    link: function(scope, el, attrs, ctrl){ scope.listOpts = function(){return [1,2,3];}}, 
    template: "<ul ng-repeat='item in listOpts()'><li>{{item}}</li><ul>" 
    } 
}) 
+0

coffeescript ошибка вмятины ... смущен ... спасибо. (потратил около 4 часов, пытаясь понять это) – kittyminky

+0

ah no worries ... Я не знаю, что coffeescript действительно так должен был перевести и просто попробовать, рад, что вы его работаете, возможно, захотите опубликовать свое исправление/ответ, если вы может в случае, если кто-то другой сделает то же самое с coffeescript – shaunhusain

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