2016-08-02 94 views
0

我有一個控制器和一個指令。我試圖訪問控制器的指令中的變量,但它似乎沒有約束力。angularjs訪問指令中的控制器變量

這裏是控制器的一個片段:

myapp.controller('AddDatasetModalController', ['$rootScope', '$scope', '$uibModalInstance', 'webServices', function ($rootScope, $scope, $uibModalInstance, webServices) { 
    var addDatasetModalCtrl = this; 
    this.selectedFileSourcetype = ''; 
    this.formClass = ''; 
    this.datasetImportSourceTypes = [{'name': 'file', 'val': 'File', 'selected': false}, {'name': 'jdbc', 'val': 'Database', 'selected': false}, {'name': 'url', 'val': 'URL', 'selected': false}]; 

    $scope.$watch(function() { 
     return addDatasetModalCtrl.selectedFileSourcetype; 
    }, function() { 
     console.log('from controller selected file source type: ' + addDatasetModalCtrl.selectedFileSourcetype); 
    }); 
    this.fileSourceTypeItemChanged = function() { 
     if (addDatasetModalCtrl.selectedFileSourcetype === 'File') { 
      addDatasetModalCtrl.formClass = 'dropzone'; 
     } 
    }; 

現在這裏是指令:

myapp.directive('conditionalDropzone', ['$parse', function ($parse) { 
     return { 
      restrict: 'A', 
      link: function (scope, el, attrs) { 
       scope.$watch(function() { 
        return scope.selectedFileSourcetype; 
       }, function() { 
        console.log('scope.selectedFileSourcetype : ' + scope.selectedFileSourcetype); 
       }); 
      } 
     }; 
    }]); 

這裏就是指令所聲明的元素:

<div class="form-group"> 
        <label for="importDataSourceType">Source type:</label> 
        <select class="form-control" id="importDataSourceType" ng-model="addDatasetModalCtrl.selectedFileSourcetype" ng-change="addDatasetModalCtrl.fileSourceTypeItemChanged()"> 
         <option ng-repeat="importSourceType in addDatasetModalCtrl.datasetImportSourceTypes" >{{importSourceType.val}}</option> 
        </select> 
       </div> 

當指令首次初始化時,我得到

from controller selected file source type: 
scope.selectedFileSourcetype : undefined 
from controller selected file source type: File 

所以我可以看到控制器範圍的手錶工作。

我想在控制器中使用'this'來引用變量,但我怎樣才能將它綁定到$範圍,以便指令可以訪問變量? //計算器:

+0

[從指令門禁控制器範圍(HTTP的可能的複製需要這個。 com/questions/19385543/access-controller-scope-from-directive) –

+0

no - 略有不同的情況 - 我有一個更簡單的情況,但我發現問題。 –

回答

0

我發現這個問題,我在指令

scope.addDatasetModalCtrl.selectedFileSourcetype

myapp.directive('conditionalDropzone', ['$parse', function ($parse) { 
     return { 
      restrict: 'A', 
      link: function (scope, el, attrs) { 
       scope.$watch(function() { 
        return scope.addDatasetModalCtrl.selectedFileSourcetype; 
       }, function() { 
        console.log('scope.selectedFileSourcetype : ' + scope.addDatasetModalCtrl.selectedFileSourcetype); 
       }); 
      } 
     }; 
    }]); 
相關問題