首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从angular-chart.js onClick事件处理程序中访问$location?

如何从angular-chart.js onClick事件处理程序中访问$location?
EN

Stack Overflow用户
提问于 2016-09-30 00:05:07
回答 2查看 119关注 0票数 0

当用户单击角度图条形图中的条形图时,我希望切换到新的URL。我正在进入事件处理程序,但应用程序从不更改URL。

angular-chart指令如下所示:

代码语言:javascript
复制
<canvas id="prCosts" class="chart chart-bar"
        chart-data="prCosts.data"
        chart-labels="prCosts.labels" chart-options="prCosts.options"
        chart-series="prCosts.series"
        chart-dataset-override="prCosts.datasetOverride"
        chart-click="onClick"
</canvas>

控制器中的相关代码如下所示:

代码语言:javascript
复制
$scope.prCosts.data = ...
$scope.prCosts.labels = ...
$scope.prCosts.options = ...
$scope.prCosts.series = ...
$scope.datasetOverride = ...
$scope.onClick = function (points, evt)
{
  var pr = points[0]._view.label;
  $location.url('/details?pr=' + pr);
};

onClick函数从图表中获取标签,并将其用作URL中的参数。该函数执行时没有错误,但应用程序不会切换到新的URL。

我在应用程序的另一个地方(但不是在事件处理程序中)使用了相同的代码,它工作得很好。这让我相信我有一个作用域问题。如何获得$location.url()调用的正确作用域?

EN

回答 2

Stack Overflow用户

发布于 2016-09-30 00:11:59

试试这个:

代码语言:javascript
复制
var that = this;

$scope.prCosts.data = ...
$scope.prCosts.labels = ...
$scope.prCosts.options = ...
$scope.prCosts.series = ...
$scope.datasetOverride = ...
$scope.onClick = function (points, evt)
{
  var pr = points[0]._view.label;
  that.$location.url('/details?pr=' + pr);
};
票数 0
EN

Stack Overflow用户

发布于 2016-09-30 04:38:51

好了,它现在起作用了,尽管我不确定我确切地理解了为什么。我在$location.url(...)调用之后添加了一个$scope.$apply()

代码语言:javascript
复制
$scope.prCosts.data = ...
$scope.prCosts.labels = ...
$scope.prCosts.options = ...
$scope.prCosts.series = ...
$scope.datasetOverride = ...
$scope.onClick = function (points, evt)
{
  var pr = points[0]._view.label;
  $location.url('/details?pr=' + pr);
  $scope.$apply();
};

我想我需要深入研究$apply()来弄清楚是什么使得这是必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39775111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档