установка области в нулевые блоки 2-х сторонняя угловая директива

0

Я создал директиву, и я считаю, что двухсторонняя привязка прерывается, когда я устанавливаю переменную связанной области (textStyleOriginal) в null. Каков хороший способ решить эту проблему?

.directive('textStylePalette', function($log, toastr, _){
        return {
            restrict: 'E',
            templateUrl: 'app/palettes/text/text-style-palette.html',
            scope: {
                textStyleOriginal: '=textStyle'
            },
            link: textPaletteLinkFn
        };

        function textPaletteLinkFn(scope, elem, attr) {
            scope._ = _;
            scope.textStyle = null;

            // Used when closing the palette
            scope.deselectStyle = function() {
                // I BELIEVE THE PROBLEM IS THE NEXT LINE
                scope.textStyleOriginal = null;
                scope.textStyle = null;
            };

   ...
            // THIS WATCH STOPS WORKING.
            scope.$watch('textStyleOriginal', function(newVal, oldVal){
                $log.debug('n: ' + newVal + '|o: ' + oldVal );
                debugger;
                if (newVal && newVal !== oldVal) {
                    ...
                }
            });
}

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

<text-style-palette ng-show="selectedStyle !== null" text-style="selectedStyle">
</text-style-palette>
Теги:
angular-directive
angularjs-scope

2 ответа

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

Через несколько минут после того, как я задал вопрос, я попробовал что-то, что, казалось, сработало. Оставив этот вопрос, чтобы подтвердить свой ответ:

В основном это было просто: "всегда делайте переданные переменные сферы как часть объекта".

Я сделал некоторые изменения, так что внешний selectedStyle, который кормил директивы, был частью объекта. здесь код

<cm-text-style-palette ng-show="selections.selectedStyle !== null" text-style="selections.selectedStyle">
</cm-text-style-palette>

Обратите внимание на то, что это выбор.selectedStyle не только selectedStyle.

Проблема связана с тем, как работает указатель переменной. Для получения дополнительной информации это видео может помочь: https://egghead.io/lessons/angularjs-the-dot#/tab-transcript

Удачи вам в ваших проектах!

1

Кажется, я знаю, в чем проблема.

Поскольку у вас изолированная область, у вас будет набор textStyleOriginal из родительской области. Это означает, что если вы переопределите его значением null, вы потеряете ссылку на исходный объект. Например, даже если вы измените свой textStyleOriginal в своей родительской области, это не будет иметь никакого эффекта в вашей директиве, поскольку вы уже потеряли ссылку на него.

  • 0
    Спасибо @limisti. Вы правы, это было так. К счастью, я быстро нашел способ решить эту проблему вскоре после публикации. Спасибо!
  • 0
    пожалуйста, примите мой ответ :) Я рад помочь вам.

Ещё вопросы

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