我在使用angular的時候常常碰到一個問題,但願在必要數據加載完成以前暫時不要顯示頁面。這時,我通常用ui-route
的resolve
功能並結合數據接口來實現。(數據api我是通常用provider
來封裝)html
首先,在config
中注入testProvider
,並不是必須,只是演示下如何配置provider
。這裏有個區別就是,在config中不能直接訪問provider
的$get
中的方法,可是能夠訪問provider
對象的屬性與方法。(好比下面代碼中的this.setPrefix
方法)api
其次,而後回到個人需求部分,在ui-route裏面獲取須要預先加載的數據。這個跟controller
中的注入沒有區別,如例子只要在resolve.userInfo
的方法參數上添加本身須要的provider
名稱,這裏就是test
,這樣咱們就能夠直接調用test.current
了。resolve
也是一個關鍵,咱們用它來獲取數據並注入到controller
中。ide
最後,在controller
裏面注入咱們須要使用的數據,userInfo
ui
angular.module('logging', []) .provider("test", function() { var prefix; this.setPrefix = function(p) { prefix = p; } this.$get = function() { return { log: function(msg) { console.log(prefix,msg); }, current:function(){ return {"name":"JMZ"}; } } } }) angular.module('myApp', ['logging']).config(["$stateProvider", "testProvider" function ($stateProvider, testProvider) { testProvider.setPrefix("works: "); $stateProvider.state("home/index", { url: "/", "templateUrl": "home/index.tpl.html", "controller": "home/index.ctrl" resolve: { userInfo: function ($q,test) { return test.current(); } } }); }]).controller("myCtrl", ["$scope","test","userInfo",function($scope, test,userInfo) { test.log(userInfo); $scope.$watch('myModel', function(newval) { test.log(newval); }]); });