AngularJs удаляет динамически созданные ng-models/ng-bind

У меня есть динамически созданные элементы с динамически сгенерированными именами ng-модели, например:

Ниже приведен псевдокод.

$scope.arr = [];

//html
<input type="button" ng-click="addNewVariable()">


$scope.addNewVariable = function() {
    $scope.arr.push([]);
    //some code that results in DOM inputs that follow
}

//dynamically created dom html
<input type="text" ng-model="myVariableName1" value="">
<input type="text" ng-model="myVariableName2" value="">
<input type="text" ng-model="myVariableName3" value="">

Теперь на экране я ввожу некоторые данные на входы:

<input type="text" ng-model="myVariableName1" value="a">
<input type="text" ng-model="myVariableName2" value="b">
<input type="text" ng-model="myVariableName3" value="c">

на данный момент у меня есть:

//I intentionally do not save values to array,
//but save them to dynamically created scope variables
$scope.arr = [[],[],[]];//i do need this structure for other purposes.

и (скорее всего) в памяти/области:

$scope.myVariableName1 = "a";
$scope.myVariableName2 = "b";
$scope.myVariableName3 = "c";

теперь я удаляю эти входные элементы из массива, используя функцию соединения:

$scope.removeArrayElements = function(removeIndex) {
    $scope.arr.splice(removeIndex, 1);
    //the same code as above earlier,
    //but this time it removes(automatically) the inputs from Dom
}

//dynamically removed dom html
(Deleted myVariableName1 - no longer in Dom.)
(Deleted myVariableName2 - no longer in Dom.)
(Deleted myVariableName3 - no longer in Dom.)

теперь я снова создаю эти входы.

Но результирующие входные данные ДЕЙСТВИТЕЛЬНО СОХРАНЯЮТ СТАРЫЕ значения, например .

//dynamically created new dom html
<input type="text" ng-model="myVariableName1" value="a">
<input type="text" ng-model="myVariableName2" value="b">
<input type="text" ng-model="myVariableName3" value="c">

где я ожидаю:

//dynamically created new dom html
<input type="text" ng-model="myVariableName1" value="">(empty value)
<input type="text" ng-model="myVariableName2" value="">(empty value)
<input type="text" ng-model="myVariableName3" value="">(empty value)

поэтому вопрос в том, как удалить динамически созданные привязки ng-models/ng-data-bindings, которые, возможно, хранятся в памяти/области?

Что-то вроде функции eval():

$scope.removeArrayElements = function(removeIndex, removeMyNgModelName) {
    $scope.arr.splice(removeIndex, 1);
    //the same code as above earlier,
    //but this time it removes(automatically) the inputs from Dom

    //this is what my question is all about!
    $scope.{removeMyNgModelName}.remove();//myVariableName1, myVariableName2, myVariableName3
}

person anji    schedule 20.12.2015    source источник


Ответы (1)


Для целевое свойство с именем переменной:

$scope.removeArrayElements = function(removeIndex, removeMyNgModelName) {
    $scope.arr.splice(removeIndex, 1);
    //the same code as above earlier,
    //but this time it removes(automatically) the inputs from Dom

    delete $scope['myVariableName' + removeIndex]; //myVariableName1, myVariableName2, myVariableName3
}
person dfsq    schedule 20.12.2015
comment
спасибо за информацию о скобках! с этим я могу получить доступ к значению. [код] предупреждение ($scope [remModel]); [/code] но это не помогает... [code] $scope[remModel].remove(); [/код] - person anji; 20.12.2015
comment
это тоже не работает: $scope[remModel].destroy(); //Пожалуйста, не беспокойтесь об именах моделей — я удостоверюсь, что они правильно совпадают. - person anji; 20.12.2015
comment
В качестве обходного пути я сделал следующее: $scope[remModel] = ; но я боюсь, что это не уничтожит/удалит привязку и, возможно, это утечка памяти? - person anji; 20.12.2015
comment
Должно быть delete $scope['myVariableName' + removeIndex];. Извините, не заметили этой моей ошибки. Метода удаления, конечно же, нет. - person dfsq; 20.12.2015