Angular: ошибка токена, когда выражение передается в пользовательскую директиву с изолированной областью действия

0

(сообщения, код и т.д., немного изменен для объяснения проблемы)

Ошибка:

Syntax Error: Token 'promiseObject' is unexpected, expecting [:] at column 3 of the expression [{{promiseObject?promiseObject.activeDEM:0}}] starting at [promiseObject?promiseObject.activeDEM:0}}].

Следующий код объясняет проблему:

Используемый HTML:

<count-up id="feafdcds" duration="1" end-val='{{promiseObject?promiseObject.value:0}}' class="number" ></count-up>

Используемая директива имеет изолированный объем. если изолированная область удалена, ошибка уходит, НО, то я не знаю, как смотреть мои атрибуты на изменение.

angular.module('core-metronic').directive('countUp', ['$filter',
    function ($filter) {

        return {
            restrict: 'E',
            scope: {
                endVal: '='
            },
            link: function ($scope, $el, $attrs) {
                $scope.$watch('endVal',function(newValue,oldValue)
                {
                    if(newValue)
                        alert(newValue); 
                },true);

                //...more code...

            }

        }
    }
]);
  • 0
    '=' является двусторонним связыванием, но вы передаете выражение. Возможно, это вызывает проблему.
  • 0
    вероятно. Любой альтернативный способ сделать то, что я пытаюсь сделать? то есть перезагрузить / перезапустить / или что-то в директиве после разрешения объекта обещания
Показать ещё 5 комментариев
Теги:
angularjs-directive

1 ответ

0

Вы не можете использовать угловую двустороннюю привязку

endVal: '='

с угловым выражением

{{promiseObject?promiseObject.value:0}}

Когда вы используете двусторонние попытки привязки в случае изменения значения, чтобы установить это новое значение для привязанной переменной. в вашем случае то, что вы хотите связать с endVal, не является переменной, а выражением. поэтому угловатый не знает, что с этим делать.

У вас есть два варианта:

  1. В случае, если вам НЕ требуется значение endVal вне директивы, которую вы можете использовать

    endVal: '@'

вместо этого и удалите оценочные фигурные скобки в шаблоне

<count-up id="feafdcds" duration="1" end-val='promiseObject?promiseObject.value:0' class="number" ></count-up>

это сработает и установит значение endVal либо для параметра promObject.value, либо для 0. Таким образом, вы должны быть осторожны, чтобы это связало значение как строку, поэтому фактическое значение будет либо "0", либо строка, содержащая значение promObject, вам, возможно, придется повторить это число снова в другом месте. но это не будет обновлять значение promObject за пределами директивы.

  1. В случае, если вам нужно обновить значение вне директивы в своем обещании в качестве объекта promo.bject, вы должны привязать endVal к переменной. так что вы можете

    endVal: '='

но вам придется изменить шаблон на

<count-up id="feafdcds" duration="1" end-val='promiseObject.value' class="number" ></count-up>

Таким образом, Angular всегда будет обновлять значение expectObject.value при изменении endVal. но это также означает, что вам придется позаботиться о том, чтобы обещание всегда существовало (и является объектом) где-то в вашем внешнем контроллере. Кроме того, вам придется применить значение по умолчанию 0, которое вы пытаетесь предоставить своим выражением где-то в другом месте. Вы можете сделать это во внешнем контроллере, например, путем инициализации функции promo

promiseObject = {
    value: 0
}

Ещё вопросы

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