Rozważ this Plunkr.AngularJS: Jak powinienem zaktualizować właściwość na rozwiązanej obietnicy w moim detektorze?
Wewnątrz mojego obserwatora zegarka chcę zaktualizować właściwość w ramach rozwiązanej obietnicy.
- Czy jest prawidłowe modyfikowanie wartości w obiekcie
$$v
? - Jeśli nie, to co powinienem zrobić?
Oto HTML:
<!DOCTYPE html>
<html id="ng-app" ng-app="myAngularApp">
<head>
<script data-require="[email protected]*" data-semver="1.2.0-rc2" src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
<script src="script.js"></script>
</head>
<body ng-controller="MyController">
<input ng-model="myDto.Weight" />{{myDto.Status}}
</body>
</html>
Oto JavaScript:
var myDto = {Weight: 200, Status: 'Acceptable'};
var myAngularApp = angular.module('myAngularApp', []);
myAngularApp.factory('myService', function($q){
return {
getMyDto: function(){
var deferred = $q.defer();
deferred.resolve(myDto);
return deferred.promise;
}
};
});
myAngularApp.controller('MyController', function MyController($scope, myService){
$scope.myDto = myService.getMyDto();
$scope.$watch('myDto.Weight', function(newVal, oldVal){
if (newVal < 150) {
$scope.myDto.$$v.Status = 'Too Light!'; // Is this the recommended way of doing it?
}
else if (500 < newVal) {
$scope.myDto.$$v.Status = 'Too Heavy!';
}
else if (Number(newVal)) {
$scope.myDto.$$v.Status = 'Acceptable';
}
else {
$scope.myDto.$$v.Status = 'Not a number!';
}
});
});
innych odpowiedzi zrobić dobrą robotę rozwiązania tego konkretne pytanie; Należy jednak zauważyć, że każda zmienna lub własność w Angular z prefiksem '$$' jest zmienną prywatną i nie powinna być modyfikowana ani zależna od niej. –
@BrandonTilley: Podejrzewałem tyle, ale czuję, że dokumentacja AngularJS powinna gdzieś to powiedzieć i powiedzieć ludziom, co mają robić. –