Зацикливание через вложенную директиву в angularjs

Я новичок с угловатыми и пытаюсь вложить некоторые директивы в гнездование, но с некоторыми проблемами.

Вот мой код:

module.controller("TimelineController", ["$scope", "$compile", function ($scope, $compile) {

    $scope.text = "ohoh";
    $scope.elements = ["12", "13"];

    console.log("Timeline Controller", arguments);

}]);

module.directive('timeline', function() {
    return {
        restrict: 'E',
        transclude: true,
        scope: true,
        controller : "TimelineController",
        link: function(scope, element, attrs, controller) {
            console.log("linking timeline", arguments);
        },
        templateUrl:'templates/directives/timeline.html',
        replace: true
    };
});

module.directive('timelineEvent', function() {
    return {
        restrict: 'E',
        transclude: true,
        scope: true,
       //controller : "TimelineController",
        link: function(scope, element, attrs/*, controller*/) {
            console.log("linking element", arguments);
        },
        templateUrl:'templates/directives/timeline_element.html',
        replace: false
    };
});

мои шаблоны:

timeline.html:

<div class="timeline">
    

timeline {{text}}

<div ng-repeat="element in elements"> - event {{element }} </div> </div>

timeline_element.html:

<div class="element">
    timeline element o/ \o
</div>

my index.html:

[...]
<body>

    

</body>

И неожиданный результат:

timeline ohoh

- event 12
- event 13
timeline element o/ \o

Ожидаемый результат будет, конечно:

timeline ohoh

- event 12
timeline element o/ \o
- event 13
timeline element o/ \o

Почему ng-repeat выполняется успешно, но вложенный вызов директивы выполняется только один раз? Не предполагается ли использовать директивы в цикле?

1
nl ja de

2 ответы

Три замечания. Я не знаю, являются ли они причиной (нужно проверить его в jsFiddle для этого), но они, несомненно, ломают что-то:

  • Почему вы устанавливаете transclude: true ? Вы не используете ng-transclude в своем шаблоне. Вам не нужно transclude: true .

  • ng-model на timeline должен быть element вместо {{element}}

  • Вы используете область : true , что означает, что будет создана новая область. Вероятно, вам нужно будет определить вашу область , как (в обеих директивах).

Таким образом:

scope: {
   element: '&'//provides a way to execute an expression in the context of the parent scope.
}
3
добавлено
В этом примере есть опечатка «ng-controlle», но она ломается без нее, так странно!
добавлено автор iamwhitebox, источник
Это действительно странно. Это не работает, если вы связываете контроллер. WTF !?
добавлено автор schlingel, источник
Работает скрипка . Он делает то, что предложил @asgoth, за исключением того, что вам не нужно создавать новую область, поэтому строки scope: закомментированы.
добавлено автор Mark Rajcok, источник

@Mark Rajcok, пожалуйста, измените следующую строку

<div ng-controlle="TimelineControllerCtrl">

to

<div ng-controller="TimelineController">
0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

Angular — русскоговорящее сообщество
Angular — русскоговорящее сообщество
3 960 участник(ов)

Общаемся на темы Angular 4+, его экосистемы, TypeScript, NativeScript и т.д. По вопросам SSR, Angular Universal @angular_universal_ru См. также: @typescript_ru, @react_js, @nodejs_ru, @js_ru Вакансии и поиск работы: @javascript_jobs

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

Angular.js (1.x) — русскоговорящее сообщество
Angular.js (1.x) — русскоговорящее сообщество
704 участник(ов)

Общаемся и обсуждаем темы, посвященные Angular 1.x и экосистеме.

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском

AngularJS, Javascript
AngularJS, Javascript
370 участник(ов)

Angularjs russian chat