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 в контроллере для ссылки на переменные, но как я могу привязать this к $scope, чтобы директива могла получить доступ к переменным?


person alessandro ferrucci    schedule 02.08.2016    source источник
comment
Возможный дубликат Область контроллера доступа из директивы   -  person ZEE    schedule 03.08.2016
comment
нет - немного другой сценарий - у меня ситуация проще, но я нашел проблему.   -  person alessandro ferrucci    schedule 03.08.2016


Ответы (1)


Я нашел проблему, мне нужно было это в директиве

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);
                });
            }
        };
    }]);
person alessandro ferrucci    schedule 02.08.2016