2016-05-04 17 views
0

私は、ファイル名がカスタムディレクティブの属性から取得されJSONデータから読み取るために私のコントローラ内の$httpにアクセスしようとしています。ここカスタムディレクティブ:コントローラスコープにディレクティブのスコープにアクセスできませんが

が私のコードである

.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)との指令は、コントローラのスコープ内でアクセスできる必要があります。このシナリオのリンク機能は追加コードです。あなたの本当の問題が解決する必要があることをお知らせください。私は値がJSONファイルの名前が含まれているJSONからデータを取得するために、コントローラ内部で(HTML)で定義されたjsondatasourceの属性値にアクセスしたいと – Desmond

答えて

0

あなたの問題は、正確には何ですか?

あなたのリンク機能がjsondatasource属性の$ scope.jsondatasource評価に角度プットために無用であるので、あなたは、あなたのディレクティブのスコープを定義しました。

+0

。リンク機能は動作しないjsondatasource – user3474103

0

はそれがあるかもしれないことの

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

に属性値にアクセスするために使用されます。 jsonからデータを取得するためにコントローラのjsondatasource属性値にアクセスしたいと思っています。 – user3474103

0

一つの方法は、スコープに取り付けられ、パラメータとしてjsonDataSourceを取って、コントローラ内部の機能にあなたのhttp.getを置くことですしてみてください。また、link関数では、directive属性で渡された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値はコントローラで利用可能です。

関連する問題