这是我在我的应用上反复使用的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>
答案 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。
希望有所帮助。