2016-05-04 2 views
0

Я пытаюсь получить доступ к $http внутри моего контроллера, чтобы читать данные JSON, где имя файла извлекается из атрибута настраиваемой директивы.Пользовательская директива: не удалось получить доступ к области директивы в области контроллера

вот мой код

.directive("myCarousel", function() { 
    return { 
     restrict: 'EA', 

     scope: { 
      jsondatasource: '=' 
     }, 

     controller: "carouselCtrl", 
     link: function ($scope, element, attrs) { 

      $scope.jsondatasource = attrs.jsondatasource; 

     }, 

     template: 'mytemplate.html' 

    } 
}) 

.controller('carouselCtrl', function ($scope, $http) { 

    $scope.quotes = ""; 
    $http.get($scope.jsondatasource).success(function (data) { 
     $scope.quotes = data; 
    }); 

    // some function with operation on the data on quotes received by JSON data 

}) 

и HTML вызов

<my-carousel jsondatasource="data.json"> </my-carousel> 
+0

Директива с частной областью видимости (jsondatasource) должна быть доступна в области контроллеров. Функция Link в этом сценарии - это дополнительный код. Сообщите нам, какова ваша реальная проблема, которую необходимо решить. – Desmond

ответ

0

Что ваша проблема именно?

Вы определили область действия для своей директивы, поэтому ваша функция ссылок бесполезна, потому что угловой объект присваивает $ scope.jsondatasource оценку атрибута jsondatasource.

+0

, поскольку я хочу получить доступ к значению атрибута jsondatasource, определенному в (html) внутри контроллера, для извлечения данных из json, где значение содержит имя json-файла. Функция Link используется для доступа к значению атрибута в jsondatasource – user3474103

0

попробовать

link: function ($scope, element, attrs, ctrl) { 
    ctrl.jsondatasource = attrs.jsondatasource; 
}, 
+0

не работает. поскольку я хочу получить доступ к значению атрибута jsondatasource в контроллере для извлечения данных из json. – user3474103

0

Один из способов сделать это может быть положить ваши http.get в функцию внутри контроллера, прикрепленного к объему и принимая jsonDataSource в качестве параметра. И в функции link вызывается функция с jsonSource, переданная в атрибуте директивы.

.directive("myCarousel", function() { 
return { 
    restrict: 'EA', 

    scope: { 
     jsondatasource: '=' 
    }, 

    controller: "carouselCtrl", 
    link: function ($scope, element, attrs, ctrl) { 
     ctrl.getQuotesData(attrs.jsondatasource); 

    }, 

    template: 'mytemplate.html' 

} 
}) 
.controller('carouselCtrl', function ($scope, $http) { 

$scope.quotes = ""; 
$scope.getQuotesData = function(source) { 
    $http.get(source).success(function (data) { 
    $scope.quotes = data; 
    }); 
}; 

// some function with operation on the data on quotes received by JSON data 

}) 
+0

Спасибо за ваш ответ. Я получил другое решение вместо «=» в jsondatasource, которое я заменил на «@», и он работает. – user3474103

0

использовать '@' вместо '=' так jsondatasource: '='

будет изменен в jsondatasource: '@' будет решить эту проблему и значение jsondatasource доступна в контроллере.

Смежные вопросы