Angular 1.X - 使用$ watch

时间:2017-01-04 21:59:28

标签: angularjs angularjs-scope angular-directive

在控制器中,我有一个填充 $ scope.main_data 的ajax调用。我希望在一个指令中获取该数据时填充它。然而,我遇到的两个问题是:

  1. 我似乎无法从指令访问 $ scope.main_data
  2. $ scope.watch因此而无法正常工作。
  3. 一旦数据到达,我如何打印指令中的数据?

    控制器:

    app.controller('myCtrl', ['$scope','$http',  function($scope, $http) {
    
    $scope.main_data = [];
    
    $http.get("some_url").success( function(data) {
      $scope.main_data = data; 
     });
    
    }]);
    

    指令:

    app.directive('myDir', function($compile, $rootScope) {
        return {
            restrict: 'A',
            scope: {
                items: '=items'
            },
            link: function($scope, element, attrs, ctrl) {
    
               $scope.$watch($scope.main_data ,function(newValue,oldValue){ 
    
                 if (newValue){           
                      console.log($scope.main_data);
                 }            
    
               });
    
            }
        };
    });
    

    HTML:

    <div ng-controller="myCtrl">
     <div my-dir>
     <div>
    </div>
    

    html中的指令存在于控制器中,但出于某种原因,我无法通过$ scope访问控制器范围,但$ scope。$ parent。

1 个答案:

答案 0 :(得分:1)

你差不多了。

app.directive('myDir', function($compile, $rootScope) {
return {
    restrict: 'A',
    scope: {
        items: '=items'
    },
    link: function($scope, element, attrs, ctrl) {
       $scope.$watch("items",function(newValue,oldValue){ 
         if (newValue){           
              console.log($scope.main_data);
         }            
       });
    }
};
});

和html:

 <div ng-controller="myCtrl">
 <div my-dir items="main_data">
 </div>
 </div>

即使您可以使用您的示波器上的一系列main_data调用并使用其他方法来“破解”并访问$parent,只需将其传递给您的=绑定指令,因此在更新控制器范围时将更新。事实上,在这种情况下你甚至不需要$ watch,你将始终拥有实际的数据。