Angular 1.X - 使用 $watch 通过指令访问控制器变量

Angular 1.X - Accessing controller variable through directive using $watch

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

  1. 我似乎无法从指令访问 $scope.main_data
  2. $scope.watch 似乎因此不起作用。

数据到达后如何打印指令中的数据?

控制器:

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.

你快搞定了。

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>

即使您可以 "hack" 周围并访问 main_data 使用范围上的一系列 $parent 调用并使用一些其他方法,只需将它传递给您的指令 = 绑定,所以它会在控制器范围更新时更新。事实上,在这种情况下您甚至不需要 $watch,您将始终拥有实际数据。