Ошибка: [$ parse: синтаксис] Синтаксическая ошибка: токен 'in' является неожиданным токеном

0

Я пытаюсь изменить строку (используя тему в разделе ниже) в раскрывающемся списке внутри настраиваемой директивы и получить эту синтаксическую ошибку.

Когда я устанавливаю выражение "тема в темах" на ng-repeat на этом элементе, он повторяет каждый раскрывающийся список 3 раза (т.е. 3 даты, 3 статуса, 3 компании). Вот так:

Изображение 174551

Единственное, что я хочу сделать здесь, - это динамическое изменение темы для каждого раскрывающегося списка. Любая помощь приветствуется.

Вот моя директива (app.js):

var varMyDirectivesApplication =
        angular.module('myDirectivesApplication', []);

    varMyDirectivesApplication.directive('dropdownMultiselect', function () {
        return {
            restrict: 'E',
            scope: {
                model: '=',
                options: '=',
            },
            template:

            "<div data-ng-class='{open: open}'>" +"<li data-ng-class='{open: open}'>" +
                "<a class='dropdown-toggle'>Select {{ topic in topics }}</a>" +
                "</li>" +

                "<ul class='dropdown-menu' aria-labelledby='dropdownMenu'>" +

                    "<li data-ng-repeat='option in options'>

                        <a>{{option.name}}</li>" +

                "</ul>" +

            "</div>",

            controller: function ($scope) {

                $scope.topics = ['Date', 'Status', 'Company'];

            }

        }

    }

 $scope.dates = [
            { "id": "1 Week", "name": "1 Week" },
            { "id": "2 Weeks", "name": "2 Weeks" },
            ...
 ];

 $scope.statuses = [
      { "id": "Draft", "name": "Draft" },
      { "id": "Inbound", "name": "Inbound" },
      ...
  ];

  $scope.companies = [
       { "id": "ABC Manufacturing", "name": "ABC Manufacturing" },
       ...
  ];

$scope.selectedIds = [];

});

HTML:

<dropdown-multiselect model="selectedIds" options="dates"></dropdown-multiselect>

<dropdown-multiselect model="selectedIds" options="statuses"></dropdown-multiselect>

<dropdown-multiselect model="selectedIds" options="companies"></dropdown-multiselect>

<ul class="list-unstyled margin-0" >
    <li data-ng-repeat="item in selectedIds" class="pointer-hover" ng-click="remove(item)">
        {{ item }}
    </li>
</ul>
  • 0
    Выражение типа "topic in topics" записывается в микросинтаксисе ng-repeat="topic in topics" . Каким вы хотели получить результат?
  • 0
    Я на самом деле повторяю элементы списка в этом раскрывающемся списке - также отображает 3 различных раскрывающихся списка (дата, статус, компания) на странице (оба не показаны выше. Когда я добавляю ng-repeat к вышеуказанному классу, он повторяет весь раскрывающийся список Таким образом, в 3 раза будет показано 9 выпадающих списков. Я обновлю код выше, чтобы дать вам лучшее представление
Показать ещё 1 комментарий
Теги:
syntax-error

1 ответ

2
Лучший ответ

Один из способов сделать это - передать тему в директиву как атрибут.

Что-то вроде этого:

<dropdown-multiselect model="selectedIds" options="dates" topic="Date"></dropdown-multiselect>

Тогда ваша директива будет выглядеть так:

varMyDirectivesApplication.directive('dropdownMultiselect', function () {
    return {
        restrict: 'E',
        scope: {
            model: '=',
            options: '=',
            topic: '@'
        },
        template:
            "<div data-ng-class='{open: open}'>" +"<li data-ng-class='{open: open}'>" +
                "<a class='dropdown-toggle'>Select {{ topic }}</a>" +
                "</li>" +
                "<ul class='dropdown-menu' aria-labelledby='dropdownMenu'>" +
                    "<li data-ng-repeat='option in options'>
                        <a>{{option.name}}</li>" +
                "</ul>" +
            "</div>"
    }
}
  • 1
    Спасибо, сработало отлично!
  • 0
    Это спасло меня! У меня есть директива, по которой я передаю токен CSRF, и он долго работал нормально. В моей директиве у меня была scope: {csrf:'='} и я начал получать ошибку синтаксического анализа, потому что токен CSRF начинался с числа, один раз, когда я его запустил. Должно быть, у меня была хорошая полоса токена, начинающаяся с письма. По-видимому, угловой не нравится, начиная с цифры. Изменение = на @ исправил

Ещё вопросы

Сообщество Overcoder
Наверх
Меню