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