У меня возникли проблемы с использованием $scope.$watch
по некоторым угловым переменным, которые у меня есть в рамках моего проекта. Я привел пример jsfiddle, чтобы проиллюстрировать проблему.ngМодель с ngSwitch, не может смотреть строковые переменные?
В принципе, я могу $scope.$watch
любая модель в пределах ng-switch
, если это объект. Если это строка, она не будет вызывать выражение часов и не будет изменена за пределами области ng-switch
. Угловая копирует исходную строку вместо передачи ее по ссылке, например, объект?
Я использую ng-repeat
над некоторыми элементами - вот некоторые из моего кода:
<div ng-switch="key">
<div ng-switch-when="deal_id">
DEALID: <input type="text" ng-model="dealIdModel"/> -- {{dealIdModel}}
</div>
<div ng-switch-when="thing_id">
THING: <input type="text" ng-model="thingIdModel.test"/> -- {{thingIdModel.test}}
</div>
<div ng-switch-default>
DEFAULT: <input type="text" placeholder="email" ng-model="items.params.email"/> -- {{items.params.email}}
</div>
</div>
И в JS:
$scope.items = {
"statusCode":"ACTIVE",
"params":{
"deal_id":"",
"thing_id":"",
"email":"Change me! I will get called"
}
};
$scope.dealIdModel = "I won't change outside of the loop or get called.";
$scope.thingIdModel = {test:'Change me! So will I!'};
$scope.$watch('items.params.email', function (now, then, scope) {
console.log('email change', now, then);
});
$scope.$watch('thingIdModel.test', function(now, then, scope) {
console.log('changed the thing', now, then);
});
$scope.$watch('dealIdModel', function(now, then, scope) {
console.log('dealID changed:', now, then);
});
Это правильный ответ. Всегда используйте $ scope.someObj.someProp вместо всего лишь $ scope.someProp, чтобы избежать затенения переменных во внутренних областях. – tandrewnichols
Я чувствую себя застенчивым ... Я новичок в Angular, и это видео (и рецензия) были великолепны. Полезно знать, что «всегда ставить точку в вашей ng-модели». –