好的,我知道标题听起来有点复杂。我会尝试解释我在尝试的内容:
我有一个模态对话框指令(基于this tutorial,它使用transclusion来包装我想在对话框中显示的内容:
.directive('modalDialog', function() {
return {
restrict: 'E',
replace: true,
templateUrl: 'directives/modalDialog.tpl.html',
transclude: true,
scope: {
show: '='
},
link: function(scope, element, attrs) {
scope.hideModal = function() {
scope.show = false;
};
}
};
});
我在我的视图中调用该指令是这样的:
<modal-dialog show="showSaveDialog">
<form role="form" name="saveForm" ng-submit="save()">
Name:<input type="text" class="form-control" id="name" ng-model="name" ng-required="true"><br>
<input type="radio" ng-model="isPublic" id="public-true" value="true" ng-required="true"> Make Public.<br>
<input type="radio" ng-model="isPublic" id="public-false" value="false" ng-required="true"> Make Private.<br>
<button type="submit" class="btn btn-primary" ng-disabled="saveForm.$invalid">Save</button>
</form>
</modal-dialog>
当我想显示对话框时,showSaveDialog
只是控制器范围内的属性设置为true
。
除了我想将单选按钮默认为&#34; public&#34; 之外,一切正常。
由于单选按钮被ng-model
绑定到isPublic
属性,因此在显示模式时我无法指定isPublic = true
。
在转换范围内,isPublic
属性最初不存在。因此,两个单选按钮都是未选中的。只有在选中其中一个单选按钮后才会创建该属性。
我试图跟随,但无济于事:
ng-init
设置isPublic = true
。奇怪的是,我可以看到被转换的范围 将isPublic
设置为true
,但单选按钮仍未选中。也许这是由于编译范围并将范围链接到模板时发生的事情顺序。除此之外,使用ng-init
似乎是一个恶心的黑客。isPublic
属性设置为true
。这不起作用,即使我作为对象属性,即(在控制器上)$scope.model.isPublic = true
,然后设置单选按钮ng-model=model.isPublic
。checked
属性作为默认值。似乎它被Angular覆盖或忽略,转而支持数据绑定模型。我怀疑问题可能是我以错误的方式接近这个问题。但是该指令的其余部分工作得非常好,所以我希望有人可以帮我找到解决方案,我想做什么!