Angular 1.X - 使用 $watch 通过指令访问控制器变量
Angular 1.X - Accessing controller variable through directive using $watch
在控制器中,我有一个 ajax 调用填充 $scope.main_data。我想在一个指令中获取填充时的数据。但是我遇到的两个问题是:
- 我似乎无法从指令访问 $scope.main_data。
- $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,您将始终拥有实际数据。
在控制器中,我有一个 ajax 调用填充 $scope.main_data。我想在一个指令中获取填充时的数据。但是我遇到的两个问题是:
- 我似乎无法从指令访问 $scope.main_data。
- $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,您将始终拥有实际数据。