javascript - Rozdíl mezi on-change a ng-change
Níže je poměrně jednoduché nastavení pro rozbalovací seznam formuláře. Událost on-change se však nespustí… pokud není změněna na ng-change.
To mě zdrželo asi hodinu, protože jinde na našem webu používáme stejnou konfiguraci (tj. vlastnost modelu/seznam/on-change direktiva) bez problémů.
Zajímalo by mě, jaký je rozdíl mezi on-change a ng-change a proč jeden v tomto případě funguje a druhý ne?
Zobrazit
<select id="grArchive"
name="grArchive"
class="form-control"
options="userList"
ng-model="selectedUser"
ng-options="user as user.name for user in userList"
on-change="showSelected()">
</select>
Ovladač
scope.selectedUser = {};
scope.userList = [];
scope.showSelected = function(){
scope.columns = addColumns;
};
var loadUserList = function(data){
scope.userList = $.map(data, function(item){
return {id: item.id, name: item.firstName + ' ' + item.lastName};
});
}
Pro jistotu: rozbalovací nabídka uživatele se vyplní podle očekávání (snímek obrazovky níže)
Odpověď č. 1
ng-změna
ng-change je direktiva poskytovaná jádrem Angular API, která interně registruje výraz, který se zavolá, když dojde k jakékoliv změně v $viewValue proměnné ng-model (tady je kód); přiřaďte jí výraz, jako je myFunction(). Tento poskytnutý výraz se vyhodnotí uvnitř základního rozsahu kontroleru. Po zavolání výrazu se spustí digest cyklus, aby se zajistilo, že se vazby aktualizují ve zobrazení. Kromě ng-change existují i jiné direktivy používané pro události, jako ng-focus, ng-mousedown, ng-submit, ng-blur atd. Zde je seznam takových direktiv
při změně
Je to způsob, jak volat JavaScriptovou funkci při change hodnoty vstupního prvku. Bude hledat function, která je globálně dostupná v kontextu (samozřejmě nebude volat funkci registrovanou v angular controller) a vyhodnotí ji.
