2

好的,我知道标题听起来有点复杂。我将尝试解释我正在尝试的内容:

我有一个模态对话框指令(基于本教程,它使用嵌入来包装我想在对话框中显示的内容:

.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-modelisPublic属性,我不知道如何指定isPublic = true模式何时显示。

在嵌入的范围内,该isPublic属性最初并不存在。因此,这两个单选按钮都未选中。仅在选中其中一个单选按钮后才会创建该属性。

尝试的解决方案

我试图关注,但无济于事:

  • ng-init在嵌入的 HTML 中使用来设置isPublic = true. 奇怪的是,我可以看到嵌入范围确实isPublic设置为true,但单选按钮都未选中。这可能是由于编译并将范围链接到模板时发生的事情的顺序。除此之外,使用ng-init.
  • isPublic属性设置true为控制器的范围。这不起作用,即使我将其作为对象属性进行,即(在控制器上)$scope.model.isPublic = true然后设置单选按钮ng-model=model.isPublic
  • 在我想要的输入上使用 HTMLchecked属性作为默认值。似乎它被 Angular 覆盖或忽略,以支持数据绑定模型。

我怀疑问题可能是我以错误的方式处理这个问题。但是指令的其余部分工作得很好,所以我希望有人能帮我找到我想做的解决方案!

4

0 回答 0