好的,我知道标题听起来有点复杂。我将尝试解释我正在尝试的内容:
我有一个模态对话框指令(基于本教程,它使用嵌入来包装我想在对话框中显示的内容:
.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
当我想显示对话框时设置为。
问题
除了我想让单选按钮默认为 "public"之外,这一切都很好。
由于单选按钮绑定ng-model
到isPublic
属性,我不知道如何指定isPublic = true
模式何时显示。
在嵌入的范围内,该isPublic
属性最初并不存在。因此,这两个单选按钮都未选中。仅在选中其中一个单选按钮后才会创建该属性。
尝试的解决方案
我试图关注,但无济于事:
ng-init
在嵌入的 HTML 中使用来设置isPublic = true
. 奇怪的是,我可以看到嵌入范围确实isPublic
设置为true
,但单选按钮都未选中。这可能是由于编译并将范围链接到模板时发生的事情的顺序。除此之外,使用ng-init
.- 将
isPublic
属性设置true
为控制器的范围。这不起作用,即使我将其作为对象属性进行,即(在控制器上)$scope.model.isPublic = true
然后设置单选按钮ng-model=model.isPublic
。 - 在我想要的输入上使用 HTML
checked
属性作为默认值。似乎它被 Angular 覆盖或忽略,以支持数据绑定模型。
我怀疑问题可能是我以错误的方式处理这个问题。但是指令的其余部分工作得很好,所以我希望有人能帮我找到我想做的解决方案!