Пользовательская директива Angularjs не может работать для ui-sref

Во-первых, это работает: <a ui-sref="students({courseId: $ctrl.Course.Id})">{{ student.Name }}</a>Который поддерживает, что мой маршрутизатор работает нормально.

Я создаю пользовательскую директиву: ссылка: "= ссылка"

<div ng-if="$ctrl.link && $ctrl.link.Name && $ctrl.link.State">
            <a ui-sref="{{$ctrl.link.State}}">{{$ctrl.link.Name}}</a>
</div>

Почему это не может работать:

<div link="{ Name: 'View Students', State: 'students({courseId: $ctrl.Course.Id})' }">

Вот ошибка:

Отклонение перехода ($id: 0 тип: 6, сообщение: ошибка перехода, подробности: ошибка: значения параметров недопустимы для состояния "студенты")

Обновление: Моя пользовательская директива

angular.module('Foo').component('Bar', {
        controller: LinkController,
        templateUrl: "link.tpl.html",
        transclude: true,
        bindings: {
            link: "=link",
    });

1 ответ

Решение

Я решил эту проблему, как показано ниже:

Как я отлаживаю: я пытаюсь заменить '$ctrl.Course.Id' на 123 (Number), это работает. Так что я знаю, что моя директива по пользовательским ссылкам работает.

<div link="{ Name: 'View Students', State: 'students({courseId: $ctrl.Course.Id})' }">

Затем я понял, что это потому, что я поместил этот $ctrl.Course.Id внутри одинарной кавычки, он будет анализировать его как строку, а не число.

Итак, вот что я сделал:

Перейти к компоненту, сделать объект:
this.studentsLink = { Name: 'View Students', State: 'students({courseId:'.concat(this.$stateParams.courseId, '})')};

Мой this.$ StateParams.courseId является строкой. Если это число, мы должны сделать this.$stateParams.courseId.toString()

Затем перейдите к шаблону:

<div link="$ctrl.studentsLink">

Надеюсь, что это поможет будущим разработчикам, которые имеют такую ​​же проблему.

Другие вопросы по тегам