/ / $ watch not fired przy zmianie stanu select w kątowym md - javascript, angularjs, angular-material

$ watch not fired przy zmianie stanu select w kątowym md - javascript, angularjs, angularjs

Próbuję zrozumieć, gdzie jest problem z moim użyciem funkcji $ scope. $ Watch, ale nie mogę zrozumieć, dlaczego funkcja zdefiniowana w zegarku nie jest uruchamiana. Mam ten wieloobiekt w materiale kątowym:

<md-select multiple ng-model="selectedItems" placeholder="Please select">
<md-option ng-repeat="item in specialities" ng-value="item" ng-class="{"selected": item.selected}">
<ng-md-icon class="checkboxfull" icon="check_box" size="18"></ng-md-icon>
<ng-md-icon class="checkboxoutline" icon="check_box_outline_blank" size="18"></ng-md-icon>
{{item.name}}
</md-option>
</md-select>

i w kontrolerach, które wywołuję $ watch dla tego widoku, powinno to być soppose selectedItems:

    $scope.$watch("selectedItems", function(){
console.log("$scope.selectedItems: ",$scope.selectedItems);
$scope.filter.idList.length = 0;
angular.forEach($scope.selectedItems, function (item) {
$scope.filter.idList.push(item.id);
});
console.log("$scope.filter.idList: ",$scope.filter.idList);
});

Jednak dziennik nigdy nie zostanie osiągnięty, a lista $ scope.filter.idList nigdy nie zostanie wypełniona. Widziałem inne przykłady na stackoverflow, które pracują z tym rozwiązaniem, np. AngularJS: $ obejrzyj wybrane wejście. Dziękuję za wskazanie mi właściwego kierunku!

Odpowiedzi:

1 dla odpowiedzi № 1

Jak się wydajesz $watchw tablicy elementów spróbuj podać specyfikację true dla trzeciego argumentu w wywołaniu zegarka, aby zrobił głęboki zegarek.

scope.$watch("data", function (newVal, oldVal) { /*...*/ }, true);

Lub alternatywnie, spróbuj $watchCollection

scope.$watchCollection("data", function (newVal, oldVal) { /*...*/ });

FYI Zostało to omówione tutaj: Jak głębiej oglądać tablicę w angularjs?


0 dla odpowiedzi nr 2

Próba, Próbka2 Odnoś oba linki. Ja też mam ten sam problem. spróbuj tego działa dobrze dla mnie .. Powinieneś użyć kropki w ng-modelu. tj. ng-model = "user.FirstName"

$scope.user = {};

$scope.$watch("user.FirstName", function() {
console.log("FirstName")
});