在模型

时间:2016-04-23 15:08:21

标签: javascript angularjs default

假设我们有指令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,但我现在描述的所有内容对我来说都很奇怪和不好。也许有一个很好的解决方案 或此问题的最佳实践(在指令初始化期间将默认值设置为模型中缺少的属性)?

0 个答案:

没有答案