8

アプリケーションのロード後に DOM から初期データを取得する方法を探しています。サーバーによってデータがビューに挿入されました。Moduleさんのvalue方法は良い方法ですか?

で作業しているときにビューからデータを取得する方法を知りたいのですが、特定のスコープにデータを挿入するためにタグをroutes使用できますか?script

thisthis questionを見ましたが、あまり役に立ちませんでした。

4

1 に答える 1

16

1)この質問に触発された最初の解決策であり、それはModulevalue方法です:

<script>
   var users_json = '[{"name":"Piotr"},{"name":"Natasha"}]'; // created by xsl
   myApp.value("PrimaryData" , users_json );
</script>
<ul>
   <li ng-repeat="user in users">{{user.name}}</li>
</ul>

次にPrimaryData、次のように、いつでもどこでもこれを使用できます。

myApp.controller('MainCtrl', function($scope, PrimaryData) {
    $scope.data = angular.copy(PrimaryData); 
    console.log( $scope.data[0].name === "John" );
});

しかし、この方法は、アプリケーションの初期化中にのみ実行routesされるため、使用を開始したときに何とか機能しませんでした。value

2) 2 つ目の解決策はディレクティブです。サーバーがルートのテンプレートを送信すると、次のようscriptに、"text/template"タイプと特別なディレクティブ名プロパティと json データを含むタグ内に配置されます。

<script  type = "text/template" rawdata >     <!-- "rawdata" is our directive
   '[{"name":"Nelson"},{"name":"Luis"}]'      // created by xsl
</script>
<ul>
   <li ng-repeat="user in users">{{user.name}}</li>    // view is beside
</ul>

そして、このディレクティブはそれをキャッチし、データを現在のルートのスコープに渡します:

studio.directive('rawdata', function() {
  return {
    link: function(scope, element, attr, ctrl) { 
        if(scope.passRawData){
            var data = (element[0].innerHTML);
            scope.passRawData(data); // Or simply scope.users = JSON.parse(data)
        } else {
            console.log( "Scope has no passRawData method" );
        }
    }
  }
});

素晴らしい!:)

于 2013-08-07T08:05:36.483 に答える