Reputation: 139
I'm working with Highcharts-ng https://github.com/pablojim/highcharts-ng
Looking through the source code, I see there are some things going on in the directive with scope.$on that I can use to broadcast. For example...
scope.$on('highchartsng.reflow', function () {
chart.reflow();
});
Then in my controller, I can call a watch function on a scope:
$scope.$watch("someElement", function(nV,oV){
if(nV===oV) return;
$scope.$broadcast('highchartsng.reflow');
});
This works fine and makes a lot of sense. What I don't understand is why I can't add additional things to the directive. For example, if I can call .reflow() from the directive, I should be able to call .zoomOut() just as easily, correct?
// This doesn't work when I add it to the directive..
scope.$on('zoomOut', function() {
chart.zoomOut();
});
// And broadcast the change from a scope in the controller
$scope.$watch('someElement', function(nV,oV){
if(nV===oV) return;
$scope.$broadcast('zoomOut');
});
What can be done to make this work? And if it can't be done, how can I make jQuery control it instead? (Is it even possible to make jQuery take over certain aspects of the directive instead of relying on angular for everything?)
Upvotes: 1
Views: 2155
Reputation: 8582
That should work. As the comment above says make sure you are calling it on the right scope.
You could just use jquery to get a handle to the chart and then call whatever methods you want. See: How can i get access to a Highcharts chart through a DOM-Container
I'm slow to add many of these types of events as they will apply to all charts on the page and don't seem a very angular way of doing things.
Upvotes: 2