0

У меня есть проблема, которая очень сложна, что я даже не знаю, как определить, поэтому я приведу пример, и, надеюсь, вы будете способный объяснить, что я делаю неправильно. Мой HTML является:Директива, Функция связи, Массив, DataBinding Порядок вещей неоднозначен

<tr ng-repeat="object in Objects"> 
    <td> 
     <div table-checkbox row-index="{{$index}}" bind-model="selectedChecks[$index]" selected-Checks="selectedChecks"> 

     </div> 
    </td> 
</tr> 

selectedChecks массив определить контроллер, как это: $scope.selectedChecks = {} и результат разметки столбец флажков Вот код моей директивы:

return { 
    restrict: 'EA', 
    scope: { 
     rowIndex: '@', 
     selectedChecks: '=', 
     bindModel: '=' 
    }, 
    template:'<input type="checkbox" ng-model="bindModel" ng-change="checkit(rowIndex)">', 


    link: function(scope, elem, attrs) { 
     scope.checkit = function(i){ 
      alert(scope.bindModel + " " + scope.selectedChecks[i]); 
     }; 
    } 
}; 

проблема заключается в том, что когда первый флажок установлен, будет выведено предупреждение: «true undefined» формирует вторую проверку/снятие флажка с любого из этих флажков и собственный вывод будет: «true false» и «false true»

Мое ожидание, что обе переменные будут такими же, так как они должны иметь точку на ту же величину, так как: scope.bindModel отправляется в директиве от selectedChecks[$index] и scope.selectedChecks[i] должны быть одинаковыми. Пожалуйста, помогите мне понять, что я делаю неправильно здесь. Кажется, что функции checkIt выполняются до того, как Angular выполняет привязку данных между флажками и массивом.

+0

Привет, не могли бы вы предоставить нам плункер/jsfiddle. Или сообщите нам, что данные будут в '$ scope.selectedChecks = {}' ?. – Ali

+0

Да, он имеет ключевое значение pare, где ключ является текущим индексом $, а значение является истинным или ложным в результате привязки угловых данных из флажка – TBE

+0

'ng-model =" bindModel "' гарантирует, что каждый раз флажок установлен, он привязывает true или false к '$ scope.selectedChecks [$ index]' – TBE

ответ

0

Кажется, что функции checkIt выполняются до того, как Угловой свяжет привязку данных между ячейками и массивом.

No, checkIt Функция не работает до угловой дозы привязки данных. Причина, по которой вы получаете true undefined в первый раз, когда вы проверяете первый, заключается в том, что $scope.selectedChecks = {} пуст. Это означает, что нет никакой собственности, как:

$scope.selectedChecks = { 
    0: false 
}; 

Таким образом, время вы проверяете первый флажок, ng-model="bindModel" обновит $scope.selectedChecks = {} так:

$scope.selectedChecks = { 
    0: true 
} 

И то же самое с другими флажками.

+0

Я знаю, что вопрос не в том, почему его неопределенный, почему они не оба были правдой? Они должны были указывать на одну и ту же переменную в этой точке – TBE

+0

'scope.bindModel' происходит от' bind-model = "selectedChecks [$ index]" 'в теге директивы в HTML. Это означает, что он должен был указывать на «scope.selectedChecks [i]» – TBE

+0

Они указывают на одну и ту же переменную, но причина, по которой они не были оба, верны, - это когда вы проверяете первый флажок, например, «ng-change» обновит значение для 'ng-model'. Таким образом, значение 'bindModel' будет истинным. И поскольку вы указали двустороннюю привязку, 'bindModel' попытается обновить' selectedChecks' с новым значением. Но поскольку я упомянул, что 'selectedChecks' не имеет свойства' 0: false', например, вы получите неопределенное значение, когда вы впервые вызываете 'selectedChecks [i]'. Здесь угловое будет создавать свойство и присваивать значение, поэтому в следующий раз вы получите правильный выход. – Ali