用指令vs multidir错误包装指令

时间:2015-08-21 17:35:30

标签: angularjs angularjs-directive

这是我在我的应用上反复使用的datepicker组件的代码。它非常冗长,几乎没有任何变化。所以,我想制定一个指令来大大缩短代码。但是,我一直得到多dir错误。我不认为删除隔离范围是一种选择,但肯定有办法吗?

Wrapper diractive

$arys = @( 'A', 'B', 'C', 'D', 'E' )

要包装的指令/代码(defaultDatepicker.html)

app.directive('ddp', function () {
    return {
    scope: {
        ngModel: '=',
        format: '=',
    },
        restrict: 'E',
        templateUrl: 'App/Main/templates/defaultDatepicker.html',
        controller: function($scope) {
            if ($scope.format == null)
               $scope.format = 'dd/MM/yy';
        }
    }
});

用法

<p class="input-group input-group-sm">
<input type="date" class="form-control" datepicker-popup ng-model="ngModel" is-open="isOpen" close-text="Fechar" clear-text="Limpar" current-text="Hoje" />
<span class="input-group-btn">
    <button type="button" class="btn btn-default" ng-click="isOpen=true"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</p>

1 个答案:

答案 0 :(得分:1)

在尝试了您提供的代码后,我没有看到任何“multidir”错误;我只是看到了这个错误:

  

与指令'ddp'一起使用的表达式'undefined'是不可赋值的!

这是你在说的错误吗?如果是这样,那是因为Angular期望您的<ddp>元素(在Usage中)具有要绑定的变量的format属性。您可以通过在指令定义中的format之后添加问号?来使=绑定可选:

...
scope: {
    ngModel: '=',
    format: '=?',  // the '?' makes it optional
},
...

有关详细信息,请参阅:https://docs.angularjs.org/error/$compile/nonassign?p0=undefined&p1=ddp

另一方面,如果你真的得到multidir error,除了从你的指令中删除隔离范围之外,我认为没有任何办法。但是,即使没有隔离范围,您仍可以观察属性值的更改。这个答案可能对此有所帮助:https://stackoverflow.com/a/28889248/5249519

希望有所帮助。