Доступ к переменной области в пользовательской директиве динамически

0

Я пытаюсь написать проверку динамического поля. если флажок установлен, новый раздел отображается на моей странице. В результате в новом разделе необходимо заполнить некоторые новые материалы.

Я пишу настраиваемую директиву, подобную этой

  <input .... multiValidation="Street,City,PostalCode" />

мой код директивы

app.directive('multiValidation', function () {
    return function (scope, iElement, iAttrs) {
       var parts = iAttrs.myvalidate.split(',');
           scope.$watch('CustomerModel.Billable', function (val) {
        if (scope.CustomerModel.Billable) {


            angular.forEach(parts, function (part) {

                var element = angular.element('[ng-model="CustomerModel.' + part + '"]');

                scope.$watch('CustomerModel.' + part, function (value) {
                    if (value == null || value == "") {
                        scope.CustomerForm.$setValidity("CustomerForm", false);
                        element.addClass("ng-invalid ng-invalid-required");
                    }
                    else {

                        element.addClass("ng-valid ng-valid-required");
                        var validate = true;
                        angular.forEach(parts, function (part) {

                            if (scope["CustomerModel." + part ] == "")
                                validate = false;

                        });

                        scope.CustomerForm.$setValidity("CustomerForm", validate);
                    }
                });




            });

        } else {
            if (scope.CustomerModel.LastName == "" || scope.CustomerModel.LastName == null)
                scope.CustomerForm.$setValidity("CustomerForm", false);
            if (scope.CustomerModel.LastName != "" || scope.CustomerModel.LastName != null)
                scope.CustomerForm.$setValidity("CustomerForm", true);
        }
    }, true);
};});

моя проблема заключается в следующей строке: я не могу получить доступ к переменной области динамически в пользовательской директиве.

 scope["CustomerModel." + part ]

пожалуйста, направляйте меня !!

  • 0
    Если вы вводите динамическую форму, angular поможет вам проверить эти поля формы. Используйте ng-required = "true" в полях динамической формы и оберните эти поля формы директивой ng-form
  • 0
    это работает, если вы поместите его в объект в области видимости? scope.object ["CustomerModel." + part]
Показать ещё 7 комментариев
Теги:

1 ответ

0
Лучший ответ

CustomerModel также является переменной $ scope. то я загружаю базу данных формы CustomerModel, которая содержит больше свойства.

Я могу получить доступ к свойству CustomerModel, как показано ниже.

    $scope.CustomerModel.postalCode

следующий путь неверен для динамического доступа к ним

    scope['CustomerModel.postalCode']

правильный путь

     scope['CustomerModel']['postalCode']

весь код

        app.directive('myvalidate', function () {
            return function (scope, iElement, iAttrs) {
                var parts = iAttrs.myvalidate.split(',');
    scope.$watch('CustomerModel.billable', function (val) {
        if (scope.CustomerModel.billable) {

            angular.forEach(parts, function (part) {

                var element = angular.element('[ng-model="CustomerModel.' + part + '"]');

                scope.$watch('CustomerModel.' + part, function (value) {
                    if (value == null || value == "") {
                        scope.CustomerForm.$setValidity("CustomerForm", false);
                        element.addClass("ng-invalid ng-invalid-required");
                    }
                    else {

                        element.addClass("ng-valid ng-valid-required");
                        var validate = true;

                        angular.forEach(parts, function (p) {
                            if (scope['CustomerModel'][p] == "" || scope['CustomerModel'][p] == "undefined" || scope['CustomerModel'][p] == null)
                                validate = false;


                        });

                        if (scope.CustomerModel.customerLastName == "" || scope.CustomerModel.customerLastName == null) validate = false;

                        scope.CustomerForm.$setValidity("CustomerForm", validate);
                    }
                });




            });

        } else {
            if (scope.CustomerModel.customerLastName == "" || scope.CustomerModel.customerLastName == null)
                scope.CustomerForm.$setValidity("CustomerForm", false);
            if (scope.CustomerModel.customerLastName != "" || scope.CustomerModel.customerLastName != null)
                scope.CustomerForm.$setValidity("CustomerForm", true);
        }
    }, true);
};
         });

и директива

         <div class="panel-body" myvalidate="street,city">

Ещё вопросы

Сообщество Overcoder
Наверх
Меню