2017-03-07 68 views
1

我在遷移到最後角度後遇到了我的指令問題。bindToController Angular 1.6

.directive('documentGrid', 
    function() { 
     return{ 
      restrict: 'EA', 
      scope: { 
       documentData: '=', 
       remove: '&', 
       edit: '&', 
       documentDatasources: '=' 
      }, 
      controller: 'DocumentCrtl', 
      controllerAs: 'vmDocument', 
      //bindToController: true, 
      //transclude: true, 
      templateUrl: '/Custom/Document/document.cshtml' 
     }; 
    }); 

<div class="box" document-grid document-data="widget" 
          document-datasources="vm.datasource.data" 
          remove="vm.remove(item)" 
          edit="vm.openSettings(item,datasources)"> 
         </div> 

在移動到最新版本之前,它可以正常工作,綁定控制器設置爲true,但現在不起作用。所以我刪除了bindToController:true,我需要使用$ scope從html指令訪問我的varibile綁定

我閱讀關於指令的指南,文章和教程,但是我沒有找到任何解決方案。

+0

我在每個'component'或'directive'上使用Angular 1.6和'bindToController',並沒有遇到任何問題。您是否在控制檯中收到任何錯誤消息? –

+0

什麼是錯誤或問題? – pranavjindal999

+0

我沒有控制檯錯誤,但如果我寫vmDocument.documentData(與bindToController = true)是未定義的,但如果我寫$ scope.documentData是我的對象綁定從調用堆棧 – andmattia

回答

1

嘗試用它來取代:

directive('documentGrid', 
    function() { 
     return{ 
      restrict: 'EA', 
      bindToController: { 
       documentData: '=', 
       remove: '&', 
       edit: '&', 
       documentDatasources: '=' 
      }, 
      controller: 'DocumentCrtl', 
      controllerAs: 'vmDocument', 
      scope: {}, 
      //transclude: true, 
      templateUrl: '/Custom/Document/document.cshtml' 
     }; 
    }); 

注意,我改變了bindToControllerscope

然後在您的控制器中,您必須在控制器的第一行綁定this,例如:var vm = this;

最後,您將能夠訪問你的數據在控制器這樣的:

vm.documentData 

看到這個小提琴:https://jsfiddle.net/2n5skwqj/794/ 在控制器功能我的日誌的名稱。

+0

小提琴使用Angular 1.4.3,因此可能不是有效的測試。 – tjrobinson

+1

我更新了它,仍然有效 – Groben