我不明白这一点,但我怀疑我做错了什么,或者是非 angularjs 方式。
我在 ng-repeat 中有一个复选框列表。它控制器从 JSON 加载列表。真的很简单。然后,我在每个生成的复选框上使用指令(汽车选择)。该指令在主 $scope (selectBrand()) 中调用一个函数。这会循环选中复选框,如果选中==true,则添加到 $scope.brand。我添加了一个文本框,以便 $scope.brand 填充它,并将其设置为 required 以便它触发内置验证,例如:
HTML:
<div ng-repeat="v in viewModel">
<label class="checkbox">
<input type="checkbox" ng-model="v.c" ng-checked="v.c" />{{v.n}}
</label>
</div>
<input type="text" name="brands" ng-model="brands" car-select required/> <br>
JS:
$scope.selectBrand = function() {
var selectedBrands = [];
angular.forEach($scope.viewModel, function(v){
if (v.c)
selectedBrands.push(v.v);
})
if (selectedBrands.length > 0)
$scope.brands = selectedBrands;
else
$scope.brands = null;
}
指令:
app.directive('carSelect', function() {
return function(scope, element) {
element.bind('change', function() {
scope.selectBrand();
})
}
});
这是我不明白的奇怪部分。花了一段时间才弄清楚这条特定的线路正在使整个事情发挥作用。如果我在页面中添加以下内容,一切都会很好。但是,如果我删除它,整个事情就会破裂。为什么?!
<div>{{selectBrand()}}</div>
除非在 HTML 中调用上述内容,否则整个事情都不会绑定。它在指令中被调用,我尝试将该调用放在 clickButton() 函数中,但最终它中断了。无论哪种方式,如果删除上述内容,文本框的实时更新似乎会失败。我很想很好地解释我做错了什么以及如何解决它:)
PLUNKER: http ://plnkr.co/edit/4QISKcq7YYH678YLsTTF?p=preview