2016-09-29 62 views
0

我想在用戶單擊角度圖條形圖中的條時切換到新的URL。我正在進入事件處理程序,但該應用程序永遠不會更改URL。

的角圖表指令看起來像這樣:

<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> 

控制器中的相關代碼看起來是這樣的:

$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()調用的正確範圍?

回答

0

試試這個:

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

我收到一個錯誤消息,說明'。$ location'是未定義的。 – SteveJ

+0

位置注入? –

+0

是的,它被注入控制器。不知道指令內部發生了什麼 – SteveJ

0

OK,它的工作現在,雖然我不知道我的理解確切原因。我在$location.url(...)調用後添加了一個$scope.$apply()

$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()找出是什麼使這個必要。

相關問題