2014-02-06 13 views
0

我是Angular JS的新手,我有一个关于预先设置我的表单的问题。从AngularJS形式到控制器的初始调用?收集完所有数据后如何渲染页面?

我的页面的默认URL是,例如,localhost:3000 /#/ projectconfig。我希望发生以下情况:加载页面时,将从控制器自动调用例程。它将$ scope.newproject = true设置为默认URL,或者在URL后面包含项目ID的情况下调用服务器来填充某些数据,即看起来像localhost:3000 /#/ projectconfig/1。所以我需要调用一些例程并检查URL中的数据,我如何在窗体和控制器中精确声明它?

当页面被调用时,我需要从服务器获取一些数据。我不希望页面在数据收到之前呈现。这涉及到projectId被指定时的上述情况,我需要预先填写表单及其数据。

谢谢你在前进, 阿卡耶夫

+1

你有什么尝试?您应该首先查看['ngRoute'](http://docs.angularjs.org/api/ngRoute)或['ui-router'](https://github.com/angular-ui/ui-router) – jnthnjns

回答

1

你需要两样东西,一个routerresolve功能。从官方文档

依赖性的可选地图应注入 控制器

报价。如果这些依赖关系中的任何一个都是承诺,路由器将等待它们全部被解决,或者在 控制器被实例化之前等待它们被拒绝。如果所有的承诺都成功解决了 ,解决的承诺的值被注入并且触发 $ routeChangeSuccess事件。如果任何承诺是 被拒绝,$ routeChangeError事件被触发。

一个简单的例子:

app.config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
     when('/something/:param', {templateUrl: 'home.html', controller: 'MyCtrl',resolve: { 
      myVar: function($q,$http){ 
       var deffered = $q.defer(); 

        // make your http request here and resolve its promise 

       return deffered.promise; 
      } 
     }}). 
     otherwise({redirectTo: '/'}); 
}]); 

myVar的将被注入到控制器,含有该承诺数据。

关于网址放慢参数

通知的第一条路线的参数/something/:param

如果您对localhost:3000/#/projectconfig/something/foobar一个电话,您可以访问通过$route服务的参数:

$route.current.params.param == 'foobar'

通过服务注入

您也可以通过返回一个服务,你打算反正注入避免了额外的DI参数:

app.config(['$routeProvider', function($routeProvider) { 
     $routeProvider. 
      when('/', {templateUrl: 'home.html', controller: 'MyCtrl',resolve: { 
       myService: function($q,$http,myService){ 
        var deffered = $q.defer(); 

         /* make your http request here 
         * then, resolve the deffered's promise with your service. 
         */ 

        deffered.resolve(myService), 

        return deffered.promise; 
       } 
      }}). 
      otherwise({redirectTo: '/'}); 
    }]); 

看一看egghead,学习角的东西很好的资源

相关问题