Angularjs: область действия пользовательской директивы не определена

0

Я создаю директиву, которая обрабатывает данные из значения атрибута. директива будет использоваться только как атрибут элемента. Так что теперь я просто хочу запускать функцию всякий раз, когда она вызывается

Директивный вызов выглядит так:

<div rest="accounts">
    {{testing}}
</div>

Определение директивы выглядит следующим образом:

app.directive("rest", [function(){
    return {
        restrict: 'A',
        scope: {
            rest: '='
        },
        link: function(scope, element, attrs, ctrl) {
            console.log(scope);
        }
    };
}])

каждый раз, когда я использую директиву, журнал показывает, что rest свойств undefined. Учетные записи - это просто строка, потому что сначала я хочу проверить директиву, но все же я не знаю, почему она всегда не определена, даже с использованием $watch like this:

app.directive("rest", [function(){
    return {
        restrict: 'A',
        scope: {
            rest: '='
        },
        link: function(scope, element, attrs, ctrl) {
            scope.$watch('rest', function(data){
                console.log(data); //Still undefined
            });
        }
    };
}])
  • 0
    account должна быть неопределенной, прежде чем передать ее директиве. Как это инициализируется?
  • 0
    учетные записи привязаны к области действия родительского контроллера? $ scope.accounts?
Показать ещё 2 комментария
Теги:
angularjs-directive

1 ответ

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

Метод, который вы используете для передачи значений, передаёт ссылку на переменную, а не строковое значение.

С rest="accounts" в HTML, = в области подразумевается двусторонняя привязка, где внутреннее свойство scope.rest привязано к внешнему свойству $scope.accounts.

Если вы всегда собираетесь передавать строку, вы должны использовать @ в свойстве scope. Это подразумевает одностороннее связывание между rest и строковым значением.

Вы также можете использовать директиву как написано без определения $scope.accounts, предоставив свое значение в виде строкового литерала, то есть rest="'accounts'". Однако эту форму следует использовать экономно, из-за громоздкой природы вложенных котировок.

Ещё вопросы

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