Панель инструментов уже использует угловые виджеты, модели и логику для рендеринга информации msg.payload в DOM браузера. Вместо того, чтобы пытаться также манипулировать элементами HTML с помощью JQuery, гораздо проще передать массив объектов данных переключателя в один контейнер, используя ng-repeat
, чтобы создать столько делителей, сколько необходимо для отображения всех переключателей.
Например, если у вас есть эти 3 набора данных в одном массиве msg.payload
:
[
{
"Switch": "ON",
"Voltage": 117.5,
"P1": 2.34,
"P2": 3.45,
"P3": 1.23,
"N": 0.12
},
{
"Switch": "OFF",
"Voltage": 0,
"P1": 0.02,
"P2": 0.03,
"P3": 0.12,
"N": 0
},
{
"Switch": "ON",
"Voltage": 125,
"P1": 0.34,
"P2": 0.45,
"P3": 0.23,
"N": 0.25
}
]
Вы можете просто передать его непосредственно на ui_template
узел, с этим угловым кодом:
<style>
span.ON { color: green; }
span.OFF { color: red; }
</style>
<div class="bg">
<div id="container" class="row">
<div class="col-md-6" ng-repeat="row in msg.payload">
<div class="plan col-md-4">
<h3>
{{$index+1}}.
<span ng-class="row.Switch">{{row.Switch}}</span>
<span ng-if="row.Switch == 'ON'">
Voltage : {{row.Voltage}}
</span>
</h3>
<div class="Amp">Amp</div>
<ul>
<li><b>P1: </b>{{row.P1}}</li>
<li><b>P2: </b>{{row.P2}}</li>
<li><b>P3: </b>{{row.P3}}</li>
<li><b>N: </b>{{row.N}}</li>
</ul>
</div>
</div>
</div>
</div>
сделать это:
Нет необходимости связываться с scope.$watch()
или создавать 7 практически идентичных разделов HTML-элементов, которыми нужно манипулировать с помощью JQuery ...
Каждый раз, когда обновляется состояние одного из коммутаторов, просто повторно отправьте весь массив данных - Angular выполняет тяжелую работу по обновлению DOM в соответствии с вашими данными и даже повторно использует существующие элементы или вставляет / обновляет / при необходимости удалите их.