0

只是学习角度。

我有一个控制器,它基本上加载了一些 json。我试图在我的指令中迭代这个。我猜我做错了?任何帮助表示赞赏。在调试器中,foreach 永远不会迭代,因为范围没有数据。我猜这是异步调用的问题?

我已经对 $scope.result 进行了硬编码,以便它同步加载到控制器中,并且工作正常。它只是似乎没有更新的 async .then 调用。

 angular.module('dilApp')

 .controller('MainCtrl',  function($scope, $http) {
 $scope.result = {};

 $http.get('data/data.json')
       .then(function(res){
          $scope.result = res.data;                
  });

该指令..

.directive('myTable', function () {
    return {
        restrict: 'E',
        link: function ($scope, element, attrs) {

            var html = '<table>';
            angular.forEach($scope.result, function (row, index) {
               .....
            })
            html += '</table>';           
            element.replaceWith(html)
        }
    }
});

此外,当我在 json 的异步调用上有一个断点时。我可以看到加载的“正确”动态数据。我偶然发现了链接函数内部的 $watch 属性,但我无法获得任何运气。

编辑 - 添加到指令的链接方法。现在,当我的 $http.get 方法被触发时,我可以正确地看到这个火灾。我只是不确定如何从要更新的链接中获取已经呈现的 html。

 $scope.$watch('result', function($scope){
                // $scope has new data how do I get the template to update ??
        });
4

1 回答 1

0

如果您只是想设置一个值,请尝试使用返回的 $http 对象的成功和错误方法。这些方法特定于 $http 返回的对象。

$http.get('data/data.json')
  .success(function(data, status, headers, config){
    $scope.result = data;                
  })
  .error(function(data, status, headers, config){
    console.log(data);  
  )};

您遇到的任何错误也可能会有所帮助。

此外,您可能不想通过引用将指令与控制器如此紧密地耦合在一起$scope.result。您可能只想传递数据以作为属性呈现,在这种情况下,egghead.io有一些关于该主题的精彩教程(指令隔离范围)。

于 2013-06-03T22:31:21.430 回答