Динамически загружаемые директивы Angular Js остаются активными после очистки DOM

У меня есть выпадающий список, который динамически загружает директиву. Когда я выбираю "option a", он загружает "директиву a", когда я выбираю "option b", он загружает "директиву b". Однако, когда загружается вторая директива и DOM перезаписывается новой, похоже, что angular продолжает действовать как на ту, которая была только что удалена, так и на новую.

Вот фрагмент из моего кода, чтобы вы могли видеть, что происходит.

    // change event on dropdown list
    function onSelection(e, args) {
        if (args) {
            ctl.build(args.type || "integer");
        }
    }


    /** build the relevant directive based on the type */
    function build(type) {
        type = type.toLowerCase();
        var directive = "<rep-"+type+"-control args='filter.args'></rep-"+type+"-control>";
        var control = $element.find("#control");

        // only compile the new control so we don't duplicate ng events on the outer directive
        control.html(directive);
        $compile(control.contents())($scope);
    }

Это просто подключается к событию изменения и запускает "build". Build принимает заданный аргумент (который является значением выбранной опции) и загружает директиву с тем же именем "<rep-option-control>", Он загружает его в определенный элемент DOM и компилирует этот элемент.

Директива A имеет ввод типа "текст", а директива B содержит ввод типа "номер". Если я сначала загружаю директиву B, а затем загружаю директиву A и вводю содержимое для ввода (type='text'), я получаю эту ошибку: https://docs.angularjs.org/error/ngModel/numfmt?p0=test в котором четко указано, что я пытаюсь ввести строковое содержимое для ввода числа.

Это означает, что хотя я бегу control.html(directive) а также $compile это, старая директива все еще активна.

Кто-нибудь знает, как я могу это остановить?

0 ответов

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