angular.js - angular路由的控制器
問題描述
路由時兩個頁面能公用一個控制器嗎,比如
javascript .state(’a’, {...controller : ’aaaController’ }) .state(’b’, {...controller : ’aaaController’ })
如果行的話,控制器是獨立的作用域還是公用的,比如說我在控制器里聲明了個變量i,在a頁面中改變了i的值,當我路由到b頁面時,i的值會跟著變嗎
問題解答
回答1:最近也在學習angularjs,就樓主所說的問題,可以做一個簡單的演示:
有如下的html結構,不同的view,相同的conroller
<p ng-controller='MyCtrl'> <button ng-click='change()'>change to 3</button></p><p ng-controller='MyCtrl'> <button ng-click='show()'>show</button></p>
部分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!
回答2:這樣子使用比較奇怪,不太確定這樣使用是否可行
個人覺得正常的用法是:一個頁面,一個控制器如果是需要控制器之間共用變量和方法,可以通過在angular里建一個service存放變量和方法,在不同的controller里面,注入我們寫的service就可以了
官方文檔里也有明確說明service是用來share code的:ServicesAngular 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
回答3:切換路由后控制器的生命周期就結束了,當前的$scope及子作用域就都死了。如果需要在多個控制器之間共享數據,可以使用服務。
相關文章:
1. html - 前端大牛都頂一下!CSS鼠標樣式問題,如圖所示2. html5 - canvas中的mousedrag事件,為什么鼠標拖出canvas,然后再次移入canvas,drag事件還觸發3. node.js - 在nodejs環境中如何配置webhook以實現hexo博客的自動更新?4. 網頁爬蟲 - python爬蟲用BeautifulSoup爬取<s>元素并寫入字典,但某些div下沒有這一元素,導致自動寫入下一條,如何解決?5. 百度地圖api - Android百度地圖SDK,MapView上層按鈕可見卻不可觸,怎么解決?6. mysql 獲取時間函數unix_timestamp 問題?7. javascript - es6擴展運算符...的問題8. 新入手layuiadmin,部署到tp中。想用php自已寫一個后臺管理系統。9. javascript - jquery怎么給select option一個點擊時觸發的事件,如圖 如果選擇自定義觸發一個時間?10. css3 - 求教CSS圖標庫的寫法,也就是先做雪碧圖,然后寫一個css表,用的時候直接用class就可以了
