2016-08-02 3 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'; 
     } 
    }; 

지향성이다 : 여기

컨트롤러의 단편이다

<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> 

: 여기

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); 
       }); 
      } 
     }; 
    }]); 

이 지시자가 선언되고있는 원소이며 지시문을 처음 초기화 할 때 나는

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

컨트롤러 범위 시계가 작동하는 것을 볼 수 있습니다.

변수를 참조하기 위해 컨트롤러에서 'this'를 사용하고 싶습니다. 그러나 이것을 $ scope에 어떻게 바인드하여 지시문에서 변수에 액세스 할 수 있습니까? // 유래 : 나는이 문제를 발견

+0

가능한 중복이 필요했다. com/questions/19385543/access-controller-scope-from-directive) –

+0

- 약간 다른 시나리오 - 좀 더 단순한 상황이지만 문제를 발견했습니다. –

답변

0

, 내가 지시

scope.addDatasetModalCtrl.selectedFileSourcetype [지시어에서 액세스 컨트롤러 범위 (HTTP의

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); 
       }); 
      } 
     }; 
    }]);