簡體   English   中英

如何在指令的控制器中訪問父級控制器的范圍?

[英]How to access the scope of a parent's controller's in a directive's controller?

我有一個嵌套在父div中的自定義指令,該父div的控制器將變量設置為其范圍,例如:

HTML

<div ng-controller="mainCtrl">
    <p>{{data}}</p>
    <myDirective oncolour="green" offcolour="red" data="data"></myDirective>
</div>

JavaScript的

app.controller("mainCtrl", function($scope){
   $scope.data= 1;
});

app.directive("myDirective", function() {
   return {
       restrict: 'E',
       scope: {
           oncolour: '@',
           offcolour: '@',
           data: '='
       },
       template: '<p>{{data}} is {{state}}</p>',
       controller: function($scope){

           console.log($scope.data); //undefined!

          /* logic to set $scope.state depending on $scope.data */

       };
   };
});

我可以將data的值傳遞給指令,因為可以看到正確解析的模板中的{{data}}

但是, $ scope.data在指令的控制器中未定義。 我需要根據此變量在其中應用一些邏輯,例如, 如果data == 1,則為state =“ on”,否則為state =“ off” ,因此我可以適當地應用上色和下

知道如何實現嗎?

“ transclude”選項是必需的:

   transclude: true,
   controller: ['$scope', function($scope) {
       console.log($scope.data);
   }],

您在指令中的作用域之前錯過了$ 之所以未定義,是因為指令$scope與return scope 您必須匹配它們。

app.directive("myDirective", function() {
  return {
    restrict: 'E',
    $scope: {
       oncolour: '@',
       offcolour: '@',
       data: '='
    },
    template: '<p>{{data}} is {{state}}</p>',
    controller: function($scope){

       console.log($scope.data); //undefined!

      /* logic to set $scope.state depending on $scope.data */

    };
   };
});

改變$scopescope ,看看對角指令文檔 ,頁面轉到結束,並檢查示例代碼

app.directive("myDirective", function() {
   return {
       restrict: 'E',
       scope: {
           oncolour: '@',
           offcolour: '@',
           data: '='
       },
       template: '<p>{{data}} is {{state}}</p>',
       controller: function(scope){

           console.log(scope.data); //undefined!

          /* logic to set $scope.state depending on $scope.data */

       };
   };
});

我敢打賭,綁定失敗,因為數據是原始數據,請參閱https://github.com/angular/angular.js/wiki/Understanding-Scopes

嘗試更改:

app.controller("mainCtrl", function($scope){
   $scope.data= 1;
});

<div ng-controller="mainCtrl">
    <p>{{data}}</p>
    <myDirective oncolour="green" offcolour="red" data="data"></myDirective>
</div>

成:

app.controller("mainCtrl", function($scope){
   $scope.data= {
      value: 1
   };
}); 

<div ng-controller="mainCtrl">
    <p>{{data.value}}</p>
    <myDirective oncolour="green" offcolour="red" data="data.value"></myDirective>
</div>

檢查AngluarJS 規范化

指令元素名稱錯誤:

<myDirective ... >

它應該是

<my-directive ...>

並確保訪問作用域而不是$ scope。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM