Angularjs 如何在路由更改时获取页面的全局范围

Angularjs 如何在路由更改时获取页面的全局范围,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我有模板(不由路由器定义),其中我有2个链接(锚定),可以更改变量 <a ng-href="#/service/service1" ng-click="activeService='minecraft'"> 这很好用。但是当我在浏览器中按下后退按钮或直接更改URL地址时,路由会更改,ng视图会更新,但是图像(在不由路由器设置的全局模板中)不会更新(它们不在ng视图(模板中)) 这里我面临的问题是,我必须使用控制器,但我不能通过路由器使用控制器,因为它的范围仅限于模板(ng视图

我有模板(不由路由器定义),其中我有2个链接(锚定),可以更改变量

<a ng-href="#/service/service1"
   ng-click="activeService='minecraft'">
这很好用。但是当我在浏览器中按下后退按钮或直接更改URL地址时,路由会更改,
ng视图
会更新,但是图像(在不由路由器设置的全局模板中)不会更新(它们不在
ng视图
(模板中))

这里我面临的问题是,我必须使用
控制器
,但我不能通过路由器使用
控制器
,因为它的范围仅限于模板(
ng视图

我还尝试使用
ng controller
,但当路线改变时,它没有被调用

有什么办法可以解决吗? 另外,我想知道是否有任何方法可以使
ng视图更具可读性,现在它太可怕了:)

谢谢, Michal Hojgr


编辑:jsfiddle:

在这里,jsfiddle/plunker将非常有用

据我所知,这两个控制器是独立的。当您在url中返回或前进时,只有
ng视图
会更改,因为只有
ng视图
处理路由器。
其他控制器
不知道
ng视图的控制器发生了什么事
。您需要从
ng视图控制器
其他控制器
发送消息,如下所述:

或者您可以考虑将第二个控制器转换为指令。< /P>


为了提高ng视图的可读性。考虑把它分解成更小的模块——指令在可能的情况下。 我用Angular的观察系统解决了这个问题。在路由更改后调用的控制器中,它广播了一个事件

$rootScope.$broadcast('event');
在控制器中,它的$scope与路由器的$scope不同,它监听
事件

 $scope.$on('event', function() {
       //code
 });

希望它对任何人都有帮助:)

如果用户点击浏览器中的后退按钮而不是应用程序中的后退按钮,它是否也必须工作?是的,这就是我所说的——这是唯一一个JSFIDLE不工作的问题。没有
ng视图
ng app=“myApp”
。看起来您正试图在视图中添加导航栏。为什么不在
ng视图中执行此操作?如果您需要访问
服务ID
,可以通过
$routeParams
:。然后根据
$routeParams
的值,您可以设置
activeService
类。JS FIDLE可以工作-当您单击链接时,它会更改并打印变量。不起作用的是后退按钮——我想以某种方式解决它:)我将尝试使用ng view做一些事情:)是的,
变量
起作用,因为angular将HTML部分中的所有内容都视为angular应用程序。你创建的
myApp
模块实际上没有运行。哦,这是事实。然而,我开始编写javascript,然后我意识到,无论如何,我都不知道怎么做:(
 $scope.$on('event', function() {
       //code
 });