2016-01-19 3 views
1

У меня есть проблема с передачей в мою директиву 3 параметра из области моего контроллера.Я передаю значения области моей директивы, но это не определено

Смотрите директиву:

angular.module('app.administration').directive('wcModuleForm', function() 
{ 

    return { 
     restrict: 'E', 
     scope: { 
      'module': '=', 
      'applications': '=', 
      'standards': '=' 
     }, 
     templateUrl: 'app/administration/directives/module/wc-module-form.tpl.html', 
     link: function(scope, form) 
     { 

      form.bootstrapValidator({...}); 
     } 
    }; 
}); 

И в HTML я называю директиву:

<wc-module-form 
     module="moduleForm" 
     applications="applications" 
     standards="standards"> 
</wc-module-form> 

3 значения moduleForm, приложения и стандарты находятся в моем контроллере области видимости. Но когда я тестирую шаблон шаблона, все значения не определены, я не понимаю, почему?

<h4>module : {{(module === undefined) ? 'undefined' : 'defined'}}</h4> -> **undefined** 
<h4>applications : {{(applications === undefined) ? 'undefined' : 'defined'}}</h4> -> **undefined** 
<h4>standard : {{(standards === undefined) ? 'undefined' : 'defined'}}</h4> -> **undefined** 

, когда я положил часы на «модуль» в функции связи директивы с console.log, вообще ничего.

шаблон директивы является начальной загрузки модальный, который содержит форму для добавления и редактирования модуля:

<div class="modal fade" id="moduleFormModal"> 
    <div class="modal-dialog"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
       <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button> 
       <h4 class="modal-title">{{ (module.id !== undefined) ? "Ajout d'un module" : "Edition d'un module" }}</h4> 
       <h4>module : {{(module === undefined) ? 'undefined' : 'defined'}}</h4> 
       <h4>applications : {{(applications === undefined) ? 'undefined' : 'defined'}}</h4> 
       <h4>standard : {{(standards === undefined) ? 'undefined' : 'defined'}}</h4> 
      </div> 
      <div class="modal-body"> 
       <form id="movieForm" method="post" class="ng-pristine ng-valid bv-form" novalidate="novalidate"> 
        <button type="submit" class="bv-hidden-submit" style="display: none; width: 0px; height: 0px;"></button> 

        <div class="form-group"> 
         <label class="control-label">Nom</label> 
         <input type="text" class="form-control" name="name" ng-model="module.name"> 
        </div> 
        <div class="form-group"> 
         <label class="control-label">Pictogramme</label> 
         <input type="text" class="form-control" name="picto" ng-model="module.picto"> 

        </div> 
        <div class="form-group"> 
         <label class="control-label">Couleur</label> 
         <input type="text" smart-colorpicker class="form-control" name="color" ng-model="module.color"> 
        </div> 

        <div class="form-group"> 
         <div class="selectContainer"> 
          <label class="control-label">Application</label> 
          <select class="form-control" name="application" ng-model="module.application_id"> 
           <option ng-repeat="application in applications" value="application.id">{{ application.name }}</option> 
          </select> 
         </div> 
        </div> 

        <div class="form-group"> 
         <div class="selectContainer"> 
          <label class="control-label">Standard</label> 
          <select class="form-control" name="standard" ng-model="module.standard_id"> 
           <option ng-repeat="standard in standards" value="standard.id">{{ standard.name }}</option> 
          </select> 
         </div> 
        </div> 

        <div class="form-actions"> 
         <div class="row"> 
          <div class="col-md-12"> 
           <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
           <button type="submit" class="btn btn-primary"><i class="fa fa-save"></i> Sauvegarder</button> 
          </div> 
         </div> 
        </div> 
       </form> 
      </div> 
     </div><!-- /.modal-content --> 
    </div><!-- /.modal-dialog --> 
</div><!-- /.modal --> 

и контроллер:

'use strict'; 

angular.module('app.administration') 
    .controller('AdministrationCtrl', ['$scope', '$rootScope', '$http', 'APP_CONFIG', function($scope, $rootScope, $http, APP_CONFIG) 
    { 

     /** 
     * différentes applications existantes 
     * @type [{object}] 
     */ 
     $scope.applications = []; 

     /** 
     * différentes standards existantes 
     * @type [{object}] 
     */ 
     $scope.standards = []; 

     /** 
     * module pour le formulaire 
     * @type {{}} 
     */ 
     $scope.moduleForm = {id: 5, 
      name: 'Fonction', 
      standard_id: 2, 
      application_id: 1, 
      picto: 'fa fa-gears', 
      color: '#F20E0E'}; 
    }]); 

Так что, если у вас есть идея, заранее спасибо.

+1

Можете ли вы предоставить более обширную скрипку? – Slytherin

+0

Попробуйте следующее: ' ' –

+0

Как определяются модули, приложения и стандарты? Они асинхронно заполнены? – Prashant

ответ

0

Это вы что искали?

(function() { 
    'use strict'; 

    angular 
      .module('app.administration') 
      .directive('wcModuleForm', wcModuleForm); 

    wcModuleForm.$inject = []; 

    function wcModuleForm() { 

     return { 
      restrict: 'E', 
      scope: { 
       module: '=', 
       applications: '=', 
       standards: '=' 
      }, 
      controller: function ($scope) { 

       form.bootstrapValidator({ 
        module: $scope.module, 
        applications: $scope.applications, 
        standards: $scope.standards 
       }); 
      }, 
      template: '<div>{{ module }}{{ applications }}{{ standards }}</div>' 
     } 
    } 

}()); 
+0

form.bootstrapValidator предназначен для проверки данных в форме. если я поставил «...», это потому, что я хотел просто уменьшить текст ^^, но почему вы поставили comportement директиву в контроллере, а не в функцию ссылки? –

+0

Функция 'controller' каждой директивы вызывается всякий раз, когда создается новый связанный элемент. Функция 'compile' каждой директивы вызывается только один раз, когда Угловые бутстрапы. Проверьте эту ссылку http://stackoverflow.com/questions/24615103/angular-directives-when-and-how-to-use-compile-controller-pre-link-and-post – ssuperczynski

0

Попробуйте удалить кавычки из атрибутов области видимости в директиве wcModuleForm.

Как это:

return { 
    restrict: 'E', 
    scope: { 
     module: '=', 
     applications: '=', 
     standards: '=' 
    }, 
    templateUrl: 'app/administration/directives/module/wc-module-form.tpl.html', 
    link: function(scope, form) 
    { 

     form.bootstrapValidator({...}); 
    } 
}; 

Если он не работает, может быть module предопределенный атрибут. Попробуйте использовать другое имя. Как <directive data-application="..."></directive> не будет работать, потому что data зарезервирован.

+0

Я удалил кавычки et и изменил модуль на mod и результат тот же: /, но я тестирую с помощью ng-if в модулеForm следующим образом: '' и ng-if return false –

1

это хорошо я найти решение:

см директиву:

angular.module('app.administration').directive('wcModuleForm', function() 
{ 

    return { 
     restrict: 'E', 
     scope: { 
      module: '=', 
      applications: '=', 
      standards: '=' 
     }, 
     templateUrl: 'app/administration/directives/module/wc-module-form.tpl.html', 
     link: function($scope, form) 
     { 
      form.bootstrapValidator({...}); 
     } 
    }; 
}); 

я добавить «$» в сферу, и это хорошо :) , но я не понимаю, почему это работа теперь поэтому, если кто-то знает, почему, он сможет объяснить это мне. спасибо :)

Смежные вопросы