Скажем, у меня есть флажок и текстовое поле. При щелчке по флажку я устанавливаю некоторое значение в textBox.
Угловая реализация
<input type="checkbox" ng-model="filterPrivateDocModel" ng-click="filterPrivateDoc(filterPrivateDocModel)">
<input st-search="target" ng-model="text" ng-change="setVal()"/>
$scope.filterPrivateDoc=function(val) {
if (val) {
angular.element('[ng-model="text"]').change();
}
}
$scope.setVal=function() {
angular.element('[ng-model="text"]').focus();
$scope.text = 'Private';
}
Он правильно устанавливает значение textBox при щелчке checkBox со значением "Private", но он не фильтрует значение, хотя я пытаюсь вызвать событие jchange в jchange (с помощью изменения ng-изменения в угловом) вручную, но все же он не Работа.
Но в тот момент, когда я начинаю вводить текст в текстовом поле любым символом, он запускает setValue (событие onchange javascript) и фильтрует данные. Зачем??
Поэтому мой вопрос:
(1) В чем разница между ручным вызовом события onchange javascript и триггером по умолчанию?
(2) И как я могу заставить его работать в моем случае, не набрав ничего в текстовом поле, и фильтр начнет работать.
Простой ответ: вы этого не делаете. Вся идея заключается в том, что вы полностью разделяете модель данных, управляющий код и представление. Ваше решение должно позволить структуре (угловой) иметь дело с обновлением представления при изменении модели, поэтому используйте модель для запуска обновления.
<input type="checkbox" ng-model="filterPrivateDocModel" ng-click="filterPrivateDoc(filterPrivateDocModel)">
<input st-search="target" ng-model="text" ng-change="setVal()"/>
$scope.filterPrivateDoc=function(val) {
if (val) {
setTextVal($scope);
}
}
$scope.setVal=function() {
angular.element('[ng-model="text"]').focus();
setTextVal($scope);
}
function setTextVal($scope) {
$scope.text = 'Private';
}