@slip31

Как сделать директиву?

Добрый день. Попытаюсь сформулировать вопрос.
Есть Multi-Step Form (думаю, многие её видели). Я хотел бы перевести её в директиву, а еще, скорей всего, каждое отдельное поле в директиву. А что делать с $stateProvider в этом случае? Его же не засунешь в директиву - он остается в конфиге модуля. Т.е. остается примерно так
.state('form', {
            url: '/form',
            template: '<form></form>',
                   })
        .state('form.profile', {
            url: '/profile',
            template: '<form-profile></form-profile>'
        })
        .state('form.interests', {
            url: '/interests',
            template: '<form-interests></form-interests>'
        })
        .state('form.payment', {
            url: '/payment',
            template: '<form-payment></form-payment>'
        });

и делаю директиву (главную, где есть ui-view)
angular
    .module('app.core')
    .directive('form', form);

function form() {
    var directive = {
        link: link,
        template: '  <form id="signup-form" ng-submit="processForm()">
                <div id="form-views" ui-view></div>
      </form>',
        restrict: 'EA'
    };
    return directive;

    function link(scope, element, attrs) {
    scope.formData = {}
    }
}
и делаю директивы полей
angular
    .module('app.core')
    .directive('formProfile', formProfile);

function formProfile() {
    var directive = {
        link: link,
        require: '^form'
        templateUrl: 'views/form-profile.html">
          
        restrict: 'EA'
    };
    return directive;

    function link(scope, element, attrs) {
    
    }
}
Ну и остальные поля. Правильно ли я понимаю, что если я в каждой директиве делаю require: '^предыдущая директива', то контроллер наследуется и я в результате "соберу" форму?
В общем, вопроса пока два (если кто-то что-то понял)
1) Как, в случае с директивой, поступать с ui-router, можно ли куда то засунуть stateProvider
2) Наследуется ли контроллер (link) в директиве, чтобы не терялась форма?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
то контроллер наследуется и я в результате "соберу" форму?

он не наследуется, вы просто получаете доступ к контроллеру директивы, от которой зависит ваша.

Как, в случае с директивой, поступать с ui-router, можно ли куда то засунуть stateProvider

uiRouter должен остаться снаружи. Вы можете добавить колбэк у директивы, который будет вызываться по переходу между скринами, а там уже менять состояние у ui router. Или еще как. Но uiRouter и все что связано с навигацией между состояниями должно остаться снаружи.

Наследуется ли контроллер (link) в директиве, чтобы не терялась форма?

link это не контроллер, link это link. И нет, и контроллер и link будут уничтожены при разрушении скоупа (или при удалении элемента).

Храните данные в сервисе.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы