Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS和location.path()_Javascript_Html_Angularjs - Fatal编程技术网

Javascript AngularJS和location.path()

Javascript AngularJS和location.path(),javascript,html,angularjs,Javascript,Html,Angularjs,我正在制作一个基于AngularJS的网页,有时我需要改变路径(如果你喜欢的话,可以改为shebang)。问题是,有时$location.path(“/my\u path\u here”)可以工作,但有时我需要在调用$location.path后调用$scope.$apply(),以使webbrowser切换到新路径 为什么会这样 编辑: 示例看看这个问题和米斯科的答案: 这个答案在技术上非常详细地解释了这个过程。所以,我要用外行的话说 AngularJS通过使用脏检查使自己工作,Angular

我正在制作一个基于AngularJS的网页,有时我需要改变路径(如果你喜欢的话,可以改为shebang)。问题是,有时
$location.path(“/my\u path\u here”)
可以工作,但有时我需要在调用
$location.path
后调用
$scope.$apply()
,以使webbrowser切换到新路径

为什么会这样

编辑:


示例

看看这个问题和米斯科的答案:

这个答案在技术上非常详细地解释了这个过程。所以,我要用外行的话说

AngularJS通过使用脏检查使自己工作,AngularJS正在监视一些值集。每次有重大事件发生时(单击,控制器中的函数调用),angular都会运行一个
摘要
循环,比较观察到的值以查看是否有任何更改。如果有变化,根据观察者的不同,angular将采取必要的措施(更新视图、触发回调、更新路由)

当您在控制器中使用默认指令并且没有jquery事件处理时,您就可以了。 然而,如果你这样做了,你需要知道你不是在角度的消化周期。这意味着观察者在出现
摘要之前不会开火

您需要知道何时更新正在监视的变量。主要是自定义DOM事件(或jquery事件)。在这种情况下,您需要让angular知道发生了更改,并且需要重新检查发生了什么(即更新观察者)

这是通过在您更改某些内容后执行
scope.$apply()


请记住,如果您已经处于angular的摘要循环中,则无法运行
$apply()
。它将抛出一个错误,如
$digest已在进行中。

从中调用的方法
showdetails
。我认为您是从非角度上下文调用角度代码。再看看控制器,这并不是一种有角度的做事方式。DOM访问和操作未在控制器中完成。我建议你先阅读一些关于angular的文档和教程。@Chandermani showDetails来自KendoUI。我没有在我的控制器中做任何DOM修改。有一个小的例外,我只阅读DOM(你可能提到的那一行),但这是不可避免的,因为这是一个KendoUI限制。因为我对KendoUI了解不多,但原因可能是我已经解释过的。这可能类似于从jquery或纯javascript调用方法。代码必须在angularjs正确运行的角度上下文中运行。如果在模块内定义此控制器,您会意识到剑道UI可能无法调用它。看看剑道是否与Angular进行了一些集成。@Chandermani好吧,有一个库可以将剑道与Angular进行集成,但这不是正式的集成,所以我想在从剑道调用时,我会继续调用
$apply()
。谢谢:)