在transcluded,isolated指令中设置无线电输入的默认值

时间:2014-03-20 12:44:07

标签: angularjs angularjs-directive transclusion

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

我有一个模态对话框指令(基于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属性最初不存在。因此,两个单选按钮都是未选中的。只有在选中其中一个单选按钮后才会创建该属性。

尝试解决方案

我试图跟随,但无济于事:

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

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

0 个答案:

没有答案