/ / $ watch не се изстрелва при промяна на състоянието на селекцията в ъглово md - javascript, angularjs, angular-material

$ watch не е изстрелян при смяна на състоянието на избора в ъглова md - javascript, angularjs, ъглова-материал

Аз се опитвам да разбера къде е проблемът в използването на $ scope. Имам този мултиселектор в Ъгловия материал:

<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>

и в контролера извиквам $ watch за този изглед, който трябва да възпроизвеждам избрани елементи:

    $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);
});

Но логът никога не е достигнат и $ scope.filter.idList никога не се попълва. Видях други примери за stackoverflow, които работят с това решение, напр. AngularJS: $ следете за избор на вход, Благодаря ви, че ме посочихте в правилната посока!

Отговори:

1 за отговор № 1

Както изглежда $watchв масив от елементи, опитайте да зададете true за третия аргумент в часовника ти, за да направи дълбок часовник.

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

Или пък опитайте $watchCollection

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

FYI Това е обсъдено тук: Как да гледате дълбоко масив в angularjs?


0 за отговор № 2

Проба, Sample2 Отговорете и двете връзки. Аз също се сблъсквам със същия проблем. Опитайте това работи добре за мен .. Трябва да използвате точка в ng-модел. т.е. ng-model = "user.FirstName"

$scope.user = {};

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