自定义指令:无法访问控制器范围中的指令范围

时间:2016-05-04 08:52:28

标签: angularjs angularjs-directive

我正在尝试访问控制器内的$http以读取JSON数据,其中从自定义指令属性中检索Filename。

这是我的代码

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

4 个答案:

答案 0 :(得分:0)

究竟是什么问题?

你为你的指令定义了一个范围,所以你的链接函数是没用的,因为angular将$ scope.jsondatasource放到jsondatasource属性的评估中。

答案 1 :(得分:0)

if (in_array($value, [1, 3, 7, 8, 12])){
    echo "test1";
} elseif (in_array($value, [5, 11, 44, 45])){
    echo "test2";
}

答案 2 :(得分: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

})

答案 3 :(得分:0)

使用'@'代替'=' 所以 jsondatasource:'='

将变为 jsondatasource:'@' 将解决问题,控制器中可以使用jsondatasource值。