Es gibt viele Beiträge zu diesem Thema, aber keine haben meine Anforderungen noch erfüllt :( Das Problem ist das Folgende: Ich bin dabei, mehrere Geräte zu steuern, was bedeutet, dass ich nur lesen kann und in bestimmte Register schreibenAngular Checkbox, Initialwert unabhängig von ng-Modell
Es gibt so genannte Kanäle, einer ist (hardware specified) nur zum Lesen und der andere nur zum Schreiben.Dies ist zum Beispiel zum Ein- und Ausschalten des Geräts, Nullen und Einsen
Nun möchte ich den aktuellen Status anzeigen, sowie die Interaktionsmöglichkeit (über eine Checkbox) um es aus- und wieder einzuschalten, ich muss das getrennt halten, da die Kommunikationsintervalle nur sind alle paar Sekunden, und der Benutzer muss eine Rückmeldung haben, ob sein Befehl ordnungsgemäß verarbeitet wurde oder nicht (die Kommunikation oder der Befehl könnte stark verzögert oder unterbrochen sein, daher wird das Gerät weiterhin ausgeführt).
Jetzt: Am Anfang ist das Gerät eingeschaltet -> Bedeutung Lese-Kanal sendet 1 und ich kann das lesen. Jetzt möchte ich, dass der Schreibkanal als Checkbox zunächst entsprechend dem Wert des Reading-Channels überprüft wird. Dann, nach dem Befehl, wird der Lesekanal-Wert ändern (! Aber im Kopf behalten, kann es nicht zusammen begrenzt werden)
Ich versuchte es auf verschiedene Weise, in meinem Beispiel können Sie finden:
ng-init="device.channels[$index-1].enabled==1"
das war mein letzter Versuch. Der Wert ist da, aber er wird einfach nicht überprüfen :(.
Ich habe mehrere Threads gelesen, dass Sie ng-checked und ng-Modell getrennt halten sollten und ich weiß nur nicht, was ich sonst tun soll. Das Gerät/Kanalstruktur sind ziemlich ähnlich denen, die ich verwenden müssen, i vereinfacht es für dich
Mein HTML:.
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<script data-require="[email protected]" data-semver="1.2.20" src="https://code.angularjs.org/1.2.20/angular.js"></script>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" />
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-controller="MainCtrl">
<legend>UI</legend>
<div ng-repeat="channel in device.channels" ng-switch on="channel.name">
<span ng-switch-when="Read-Channel">
<p ng-if="channel.enabled==1">Device is ON</p>
<p ng-if="!channel.enabled==0">Device is OFF</p>
</span>
<!-- initial problem -->
<span ng-switch-when="Write-Channel">
<input type="checkbox"
ng-init="device.channels[$index-1].enabled==1"
ng-model="channel.enabled"
ng-change="stateChanged(channel.enabled)">
Device is off: {{ channel.enabled == 1 }}
</span>
</div>
<legend>Data</legend>
<div>
{{ device | json }}
</div>
</body>
</html>
Mein JS:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.device = {
channels: [
{ name: 'Read-Channel', enabled: 1 },
{ name: 'Write-Channel', enabled: 0 }
]
};
$scope.stateChanged = function(value){
console.log("Sending command to turn device off?" + (value == 1));
};
});
für eine Live-Version sehen das Plunker: http://plnkr.co/edit/vFvWjyQN14HKHAHvBKh5?p=preview
Vielen Dank im Voraus!
das Problem, das ich sehe, ist, dass, wenn ich den Code "freigegeben" laufen: 0, und wenn i/deaktivieren Sie überprüfen: „freigegeben ": true /" aktiviert ": false – MayK
Nono. Das ist nicht das Problem;). Es sendet den richtigen Befehl an den anderen Teil, der hier nicht behandelt wird. Ich wollte es mit dem Befehl console.log betonen. – Andrea
haben Sie versucht, zwei Checkboxen zu erstellen, eine mit ng-checked und die andere mit ng-model und diese je nach Fall verstecken/anzeigen? – MayK