angular路由的控制器

发布于 2022-09-01 05:21:26 字数 342 浏览 20 评论 0

路由时两个页面能公用一个控制器吗,比如

javascript    .state('a', {
        ...
        controller : 'aaaController'
    })
    .state('b', {
        ...
        controller : 'aaaController'
    })

如果行的话,控制器是独立的作用域还是公用的,比如说我在控制器里声明了个变量i,在a页面中改变了i的值,当我路由到b页面时,i的值会跟着变吗

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

十二 2022-09-08 05:21:26

最近也在学习angularjs,就楼主所说的问题,可以做一个简单的演示:

有如下的html结构,不同的view,相同的conroller

<div ng-controller="MyCtrl">
    <button ng-click="change()">change to 3</button>
</div>
<div ng-controller="MyCtrl">
    <button ng-click="show()">show</button>
</div>

部分controller代码:

 .controller('MyCtrl', function ($scope, $log) {
        $scope.num = 2;
        $scope.change = function () {
            $scope.num = 3;
        };

        $scope.show = function () {
            $log.info($scope.num);
        };
    });

首先点击show按钮,输出结果如下:
图片描述

然后点击change to 3按钮,再次点击show按钮,结果如下:
图片描述

从这个实验可以看出,虽然是同一个controller,实际上scope是两个完全不相干的scope。
scope的结构也是树形的,同dom结构对应,如上的html结构就会有两个scope。
再看一个明显的例子:

 .controller('MyCtrl', function ($scope, $log) {
        $log.info('init scope...');
    });

看控制台
图片描述
结果打印了两遍,说明方法执行了两次。如果共享scope就不会执行两次了。

综上:你在控制器里声明了个变量i,在a页面中改变了i的值,当你路由到b页面时,i的值不会改变

hope help you!

内心荒芜 2022-09-08 05:21:26

这样子使用比较奇怪,不太确定这样使用是否可行

个人觉得正常的用法是:
一个页面,一个控制器
如果是需要控制器之间共用变量和方法,可以通过在angular里建一个service存放变量和方法,在不同的controller里面,注入我们写的service就可以了

官方文档里也有明确说明service是用来share code的:
Services
Angular services are substitutable objects that are wired together using dependency injection (DI). You can use services to organize and share code across your app.

https://docs.angularjs.org/guide/services

酸甜透明夹心 2022-09-08 05:21:26

切换路由后控制器的生命周期就结束了,当前的$scope及子作用域就都死了。
如果需要在多个控制器之间共享数据,可以使用服务。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文