2016-03-26 7 views
0

私はちょっと混乱しています。私は基本的にいくつかの "状態"に応じて異なるモーダルを開くディレクティブを書いた。 何らかの理由で、「リンク」機能がもう実行されなくなりました。私はそれがいつ仕事を止めたか分かりません。たぶん、いくつかの不完全なマージの競合、おそらくいくつかのマイナーなアップデート? 誰もが正しい方向に私のヒントを助けることを願っています。コントローラが存在するとき、anglejsリンク機能が実行されない

リンク関数は、コントローラが存在しない場合は呼び出されません。それ以外の場合は実行されません。コントローラのロジックをコメントアウトしても、リンクは実行されません。

<hcd-modal-messages status="status" redirect="app.dashboard.index"></hcd-modal-messages> 

ディレクティブ:私は私のリンク機能にコントローラロジックを置くことになった:

angular 
    .module('hcdProtocol') 
    .directive('hcdModalMessages', function() { 
     return { 
      restrict: 'E', 
      templateUrl: 'app/protocols/components/modalMessages/modalMessages.html', 
      scope: { 
       labelSuccess: '@labelSuccess', 
       labelProcess: '@labelProcess', 
       labelFailed: '@labelFailed', 
       labelCached: '@labelCached', 
       status: '=status', //values: HIDDEN, PROCESS, SUCCESS, FAIL 
       redirect: '=redirect', 
       delay: '@redirectDelay' //delay in milliseconds 
      }, 
      controller: ['$scope', '$timeout', '$state', function($scope, $timeout, $state) { 
      $scope.processModal = new Foundation.Reveal(
       angular.element(angular.element(".modal-process")[0]), 
       { 
        closeOnClick: false 
       } 
      ); 
      $scope.successModal = new Foundation.Reveal(
       angular.element(angular.element(".modal-success")[0]), 
       { 
        closeOnClick: false 
       } 
      ); 
      $scope.failModal = new Foundation.Reveal(
       angular.element(angular.element(".modal-fail")[0]), 
       { 
        closeOnClick: true 
       } 
      ); 
      $scope.offlineModal = new Foundation.Reveal(
       angular.element(angular.element(".modal-cached")[0]), 
       { 
        closeOnClick: false 
       } 
      ); 

      $scope.$watch('status', function(status) { 
       //close all modals 
       $scope.processModal.close(); 
       $scope.successModal.close(); 
       $scope.failModal.close(); 
       //open modal corresponding to current status 
       switch(status) { 
        case 'PROCESS': 
         $scope.processModal.open(); 
         break; 
        case 'SUCCESS': 
         $scope.successModal.open(); 

         if(typeof $scope.redirect !== 'undefined') { 
          //delay redirection 
          $timeout(function() { 
           $state.go($scope.redirect); 
          }, $scope.redirectDelay); 
         } 
         break; 
        case 'OFFLINE_CACHED': 
         $scope.offlineModal.open(); 

         if(typeof $scope.redirect !== 'undefined') { 
          //delay redirection 
          $timeout(function() { 
           $state.go($scope.redirect); 
          }, $scope.redirectDelay); 
         } 
         break; 
        case 'FAIL': 
         $scope.failModal.open(); 
         break; 
       } 
      }); 

      }], 
      link: function(scope, element, attrs, controller, transcludeFn) { 
       //set default label 
       if(typeof attrs.labelProcess == 'undefined') scope.labelProcess = "Creating new protocol"; 
       if(typeof attrs.labelSuccess == 'undefined') scope.labelSuccess = "successfully created"; 
       if(typeof attrs.labelFailed == 'undefined') scope.labelFailed = "creation failed"; 
       if(typeof attrs.labelCached == 'undefined') scope.labelCached = "Created in offline cache"; 

       scope.redirectDelay = (typeof attrs['redirect-delay'] === 'undefined') ? 3000 : attrs['redirect-delay']; 
       scope.redirect = (typeof attrs.redirect === 'undefined') ? false : attrs.redirect; 

       //close modals when directive ist destroy to avoid grey (ui blocking) overlay 
       scope.$on('$destroy', function() { 
        scope.processModal.close(); 
        scope.failModal.close(); 
        scope.successModal.close(); 
        scope.offlineModal.close(); 
       }); 
      } 
     } 
    }); 

私は現在、AngularJSのv1.5.3

マイクイックフィックスを使用しています。そのほとんどは最初にそこに属していました。私はコントローラーを持っていないので、今は動作していますが、私はまだコントローラとリンクが私の場合には実行されなかった理由を理解できません。

答えて

0

使用この形式は

angular 
    .module('module') 
    .controller('MyCtrl',/*your controller*/) 
    .directive('myDirective', function() { 
     return { 
      require: '^^MyCtrl', 
      link: function (scope, el, attrs, MyCtrl) /*....*/ 
     } 
    }) 
+0

これは " 'hcdModalMessages' ディレクティブによって要求されるコントローラ 'hcdModalMessagesController' が、見つけることができません!" につながります – noisy

関連する問題