假设我们有指令myDirective:
function myDirective() {
return {
restrict: 'EA',
template: template,
require: 'ngModel',
scope: {},
link: function postLink(scope, element, attr, ngModelCtrl) {
}
}
}
它使用ng-model指令。假设我们使用这个指令:
// myAppController
scope.myDirectiveData = {age: 10};
// templates
<form>
<div ng-controller="myAppController">
<my-directive ng-model="myDirectiveData"></my-directive>
</div>
</form>
myDirective模型必须包含年龄和性别属性。但正如您在我们的案例中所见,我们在模型中只有年龄属性。在这种情况下,当模型没有某些属性或整个模型未定义时,我想将默认值设置为model,即:
link: function postLink(scope, element, attr, ngModelCtrl) {
var defaultModelValue = {age: 20, sex: 'female'};
// modelValue variable is not defined somewhere, I just wrote it for example what I want to do
if (!modelValue) {
// modelValue = defaultModelValue;
}
if (angular.isUndefined(modelValue.age)) {
// modelValue.age = defaultModelValue.age;
}
if (angular.isUndefined(modelValue.sex)) {
// modelValue.sex = defaultModelValue.sex;
}
}
如何在模型中将默认值设置为缺少的属性?
我可以使用$ setViewValue将默认值设置为模型中缺少的属性,但在这种情况下我的控件变脏了。我可以在这种情况下使用$ setPristine,但我现在描述的所有内容对我来说都很奇怪和不好。也许有一个很好的解决方案 或此问题的最佳实践(在指令初始化期间将默认值设置为模型中缺少的属性)?