2016-02-29 2 views
3

Я несколько секунд стучал головой о клавиатуру.AngularJs - Удалить все директивы на основе имени класса

У меня есть директива, которая динамически получает данные с сервера. Я скрываю раскрывающийся список show на основе последующего значения dropdownlist. Я хотел бы удалить все предыдущие выделения, когда я сделаю новый выбор. То, что я испытываю, состоит в том, что данные по-прежнему остаются от предыдущего выбора, даже после того, как я убираюсь.

Подпишите мой код: функция link (scope, element) { scope.displayChildren = displayChildren;

function displayChildren() { 
    var currentItem = scope.model; 
    scope.children = []; 
    var elementName = currentItem.name + '-child'; 
    var elementResult = angular.element(document.querySelector('.' + elementName)); 

    if (elementResult.length > 0) { 
     element.contents().remove(); 
     elementResult.contents().remove(); 
     element.append('<composed-components model="model"></composed-components>'); 
     $compile(element.contents())(scope); 
    } 

    for (var i = 0, x = currentItem.children.length; i < x; i++) { 
     var currentChild = currentItem.children[i]; 
     var array = currentChild.parentValue.split(','); 
     scope.children = getScopeChildren(array, currentChild); 
    } 
    if (scope.children.length < 1) return; 
    element.append('<composed-components class="{{child.parentName}}-child" ng-repeat="child in children track by child._id" model="child"></composed-components>'); 
    $compile(element.contents())(scope); 
    } 

    function getScopeChildren(array, currentChild) { 
    if (scope.model.currentValue === null) { 
     return []; 
    } 
    if (array.length > 1) { 
     for (var i = 0, x = array.length; i < x; i++) { 
     scope.children = compare(scope.model.currentValue.value, array[i], scope.children, currentChild); 
     } 
    } else { 
     scope.children = compare(scope.model.currentValue.value, currentChild.parentValue, scope.children, currentChild); 
    } 
    return scope.children; 
    } 

    function compare(value1, value2, array, currentValue) { 
    if (value1 === value2) { 
     array.push(currentValue); 
    } 
    return array; 
    } 
} 

Любая помощь будет принята с благодарностью.

ответ

1

Если вы связываете данные из выпадающих списков с областью с атрибутом ng-model, вы можете просто удалить значения из области действия, а значения в выпадающих меню будут автоматически обновляться с помощью умного углового two-way data binding.

Вы также можете проверить директиву ngOptions, чтобы быстро отвлечь логику популяции выпадающего списка от функции управления контроллером/директивой.

+0

Благодарим за это. Причина, по которой он не удалялся, заключался в том, что класс в ng-repeat оставил позади грязный html. Я закончил обертку пользовательских директив внутри div с идентификатором. Кажется, что он правильно очищается. – Michael

Смежные вопросы