2017-08-30 68 views
0

我有一些旧的离子App(离子v 1.3.x)。根据在App的另一部分中检测到的某些异步更改,它会发出$ rootScope级别事件。我在控制器中捕获该事件以更新该事件被捕获时的视图。沿着下面的行。

// In a different part of the App an asynchronous event is caught 
$rootScope.$emit("some:change:event", grpKey); // from asynchronous event 

// In Controller 
$rootScope.$on("some:change:event", function(event, param){ 
    reComputeValues(param); 
} 

function reComputeValues(param){ 
    $scope.someVariable = updated value; 
    //$scope.$apply(); 
} 

function reComputeValues_withApply(param){ 
    $scope.$apply(function(){ 
     $scope.someVariable = updated value; 
    }); 
} 

即使$ scope.someVariable被更新(我可以看到它通过它在调试器步进时),当我在视图中的更改不会反映在视图中。如果我离开那个视图并回到视图,那么页面将重新加载并且更改就在那里。

在挖掘它之后,首先看起来是$ apply调用应该做的。我这样做了两种不同的方式(只需调用$ scope。$在$ apply调用中应用或封装变量更新)。虽然这确实更新了视图,但它提供了一些似乎与某个范围问题有关的错误。我意识到这可能是因为当事件被捕获并且函数被调用时它在$ rootScope的上下文中并且变量在$ scope级别更新,这就是为什么当强制$时它不会自动更新视图并给出错误应用电话。但是$ scope也是$ rootScope的一个子元素,所以我不完全理解$ rootScope和$ scope这里的交互以及视图没有更新的原因。

欣赏关于如何最好地解决此问题的任何指示。

谢谢, Sanjay。

+0

你能为我们提供一些html吗?在脚本中有一些错误,但我认为这是因为它只是为了向我们展示这个想法,但是缺少一个用于$的“)”。也许“更新的价值”太参数。只是为了确保你的问题的工作将是完美的,因为它应该像没有$应用那样工作。 – MrWook

+0

@Carsten - 对不起,延迟。是的,缺少的括号就在上面的例子中 - 而不是代码中。有关HTML低于 '的 需要骑:{{gt_countH.needRideCount}}    有无路线:{{gt_countH.haveRideCount}}    打开景点:{{ gt_countH.availablePoolCapacity}} ' 在控制器的$范围变量设置如下 '$ scope.gt_countH = <返回与值哈希函数调用>' 感谢您的想法 –

+0

对不起代码格式似乎没有出现在上面的评论 –

回答

0

你可以尝试下面的改变代码,让我知道。

$rootScope.$emit("some:change:event", grpKey); // from asynchronous event 

// In Controller 
$rootScope.$on("some:change:event", function(event, param){ 
    $rootScope.$apply(function(){ 
     reComputeValues(param); 
    }); 
} 

function reComputeValues(param){ 
    $scope.someVariable = updated value; 
    //$scope.$apply(); 
} 

function reComputeValues_withApply(param){ 
    $scope.$apply(function(){ 
     $scope.someVariable = updated value; 
    }); 
} 
+0

谢谢你的想法。我试过了,并在$ rootScope级别得到类似的错误。下面的错误代码片段。 'angular.js:13920错误:[$ rootScope:inprog] http://errors.angularjs.org/1.5.8/$rootScope/inprog?p0=%24apply at angular.js:38 at n( angular.js:18042) at m。$ apply(angular.js:17780)' –

相关问题