AngularJS: Wie soll ich update-eine Eigenschaft auf einer gelöst Versprechen im inneren meiner Uhr listener?
Betrachten diese Plunkr.
Im inneren meiner Uhr Zuhörer, ich möchte ein update-Eigenschaft auf eine gelöst Versprechen.
- Ist es richtig, ändern die Werte auf die
$$v
Eigenschaft? - Wenn nicht, dann was soll ich tun?
Hier ist der HTML:
<!DOCTYPE html>
<html id="ng-app" ng-app="myAngularApp">
<head>
<script data-require="angular.js@*" 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>
Hier ist das 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!';
}
});
});
- Die anderen, Antworten machen einen guten job der Beantwortung dieser spezifischen Frage; es sollte jedoch darauf hingewiesen werden, dass eine variable oder Eigenschaft in Eckige vorangestellt
$$
ist eine private variable und sollte nicht geändert werden, oder Sie abhängt. - Ich vermutete, so viel, aber ich fühle mich wie der AngularJS Dokumentation nennen soll dies ausdrücklich irgendwo, und die Leute sagen, was zu tun ist, anstatt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde nicht ändern
$$v
direkt, es ist eine Implementierung detail. Verwenden Sie stattdessenthen
um das Ergebnis der Versprechen, dann verwenden Sie es wie Sie wollen. Das erfordert nur minimale änderungen an Ihrem code.Demo-link
Es ist ein wenig seltsam zu ändern, die Versprechen seit ein Versprechen darstellt, das Ergebnis einer Aktion, die asynchron durchgeführt. Es ist eigenständig.
Ich denke, dass es besser ist, fügen Sie eine weitere service-Funktion, um die Daten zu aktualisieren den status. Versuchen Sie, diese
Aktualisiert Plunker