javascript – 如果通过ajax填充范围,AngularJS指令模板不会更新

我试图把这个问题尽可能准确的标题。
我对AngularJS来说很新,但我在这个问题上踩踏了。我试图制作一个jsfiddle来更好地说明我的问题,但它依赖于太多的单独的文件。唉,它还没有在线,所以承担冗长。 🙂
所以基本上我有一个应用程序,我建立与yeoman init有角度,我的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的锚点,它有效地打开了view / lineup.html;为了简化事情,让我们假设后者仅包含(自定义)<播放列表>< /播放列表>标签。
在指令的控制器功能内,我确定$ .get(“/ players”)的工作原理是因为我可以从chrome的网络标签看到响应正确地作为一组播放器。
最后,我的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>

我的想法是使“playerlist”指令独立于LineupCtrl,因为我可能想在项目的其他地方重用它。
好的,所以这里:当我点击第一次加载#/阵容的锚点时,上表的tbody元素是空的(没有附加的行);有趣的是,当我第二次点击它时,表格正确填充了我获得的$ .get(“/ players”)指令的玩家。我怀疑这是由于在播放playerlist.html和正在分配的$ scope.players变量之间发生的轻微滞后。但是不是一个角度的应用程序的整体点吗?当范围变量更改相应视图(及其模板)是否更新?
请帮忙!
干杯,
安德里亚

无论何时更新角度函数之外的范围变量,您需要对角度进行更改。见scope.$apply

$.get("/players")
.success(function(players) {
   $scope.$apply(function () {
     $scope.players = players;
   });
});

在另一个注意事项上,角度有一个内置的ajax service,所以没有必要使用jQuery。在本教程中可以找到一个很好的解释:5 – XHRs & Dependency Injection

翻译自:https://stackoverflow.com/questions/14984777/angularjs-directive-template-not-updating-if-scope-is-populated-via-ajax

转载注明原文:javascript – 如果通过ajax填充范围,AngularJS指令模板不会更新