この質問には、できるだけ正確なタイトルを付けようとしました。
私は AngularJS にかなり慣れていませんが、この問題に悩まされています。私の問題をよりよく説明するために jsfiddle を作成しようとしましたが、あまりにも多くの個別のファイルに依存しています。残念ながら、まだオンラインではないので、冗長性に耐えてください。:)
だから基本的に私はで構築したアプリを持っていますyeoman init angular
、そして私のapp.js
外見は次のようになります:
"use strict"
var myApp = angular.module("myApp", [])
.config(function($routeProvider) {
$routeProvider
.when("/lineup", {
templateUrl: "views/lineup.html",
controller: "LineupCtrl"
})
//other routes
.otherwise({
redirectTo: "/"
});
})
.directive("playerlist", function() {
return {
restrict: "E",
transclude: false,
scope : {},
templateUrl : "views/directives/playerlist.html",
controller : function($scope) {
$.get("/players")
.success(function(players) {
$scope.players = players;
});
},
replace : true
}
});
私のindex.html
ピックアップし、効果的に開くapp.js
を参照するアンカーを持っています。簡単にするために、後者には(カスタム)タグのみが含まれていると仮定しましょう。ディレクティブのコントローラー関数内では、応答がプレーヤーの配列として正しく送信されることがクロムのネットワーク タブからわかるので、
正常に機能すると確信しています。
最後に、次のタグを置き換えるコードがあります。#/lineup
views/lineup.html
<playerlist></playerlist>
$.get("/players")
views/directives/playerlist.html
<playerlist>
<table class="table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Role</th>
<th>Strength</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="player in players">
<td>{{player.first_name}} {{player.last_name}}</td>
<td>{{player.age}}</td>
<td>{{player.role}}</td>
<td>{{player.strength}}</td>
</tr>
</tbody>
</table>
LineupCtrl
私のアイデアは、プロジェクトの他の場所で再利用したい場合があるため、「playerlist」ディレクティブを独立させることでした。最初
に読み込まれるアンカーをクリックすると、上のテーブルの要素は空です (行が追加されていません)。面白いことに、2 度目にクリックすると、指示に従って取得したプレーヤーがテーブルに正しく表示されます。これは、playerlist.html のレンダリングと $scope.players 変数の割り当ての間に発生するわずかな遅延が原因であると思われます。しかし、それがAngularアプリの要点ではありませんか? スコープ変数が変更されると、それぞれのビュー (およびそのテンプレート) が更新されますか?
助けてください!
乾杯、
アンドレア#/lineup
tbody
$.get("/players")