我一直在阅读有关角度范围和继承的很多内容,但我无法理解这个问题。这是我正在使用的HTML:
<div class="sensorquery-sensor" ng-repeat="sensor in query.sensors" ng-controller="SensorsCtrl">
<select class="form-control"
ng-model="selected.sensor"
ng-options="sensor.name for sensor in parameters.sensors">
</select>
<select class="form-control"
ng-model="selected.definition"
ng-options="definition.value for definition in definitions">
</select>
<select class="form-control"
ng-model="selected.operation"
ng-options="operation for operation in operations">
</select>
</div>
如您所见,我有ng-repeat
基于query.sensors
。存储在此query.sensors
数组中的值应该很简单:
{
name: 'sensor1',
type: 'temperature'
}
但我想使用子控制器:SensorsCtrl
来处理每个传感器的更多逻辑并隐藏传感器的复杂性。传感器看起来像:
{
name: 'sensor1',
attributes: [
'model',
'brand'
],
definitions: [
{
datatype: 'double',
value: 'temperature'
},
{
datatype: 'integer',
value: 'pressure'
},
{
datatype: 'string',
value: 'color'
}
]
}
所以它在我的SensorsCtrl
控制器中,我想放置选择逻辑:
$scope.$watch('selected.sensor', function(sensor) {
$scope.definitions = sensor.template.definition;
});
$scope.$watch('selected.definition', function(definition) {
if (definition.datatype === 'string') {
$scope.operations = ['Count'];
} else {
$scope.operations = ['Max', 'Min'];
}
$scope.selected.operation = _.first($scope.operations);
});
当用户选择不同的传感器和定义时,如何在转换传感器时保持与父query.sensors[$index]
的链接?
在selected
上设置观察程序并更新query.sensors
数组会触发无限$digest
循环。
答案 0 :(得分:0)
我找到了正确的解决方案:
<div class="sensorquery-sensor" ng-repeat="sensor in query.sensors" ng-controller="SensorsCtrl">
<!-- ... -->
</div>
sensor
是对父query.sensors
的原始对象的引用。它是在子控制器范围内创建的。
所以在我的SensorsCtrl
控制器中,我只能看:
$scope.$watch('sensor.definition', function(definition) {
/* ... */
});
所以我可以在这个控制器中隐藏一些复杂性,同时保持与原始元素的正确链接。
它没有回答维持一个不太复杂的对象的问题,但我认为这是一个不同的问题。