实例化角度js控制器

时间:2016-07-02 12:48:31

标签: angularjs http angular-ui-router

myApp.js

    angular.module("myApp" , [subApp1]); //line1

subapp1.js

import mycontroller from './mycontroller';
 angular.module("subApp1",[])
 .config(['$stateProvider','$urlRouteProvider',function($stateProvider,$urlRouteProvider){
 $stateProvider.state('home', {
                                        url:'/home',
                                        templateUrl: './app/home.html',
                                        controller : myController //line 2
                        });
}])
.controller('myController',['$scope','$http', myController]]); //line 3

问题:

以下是我的home.html。 如果我使用ajax从json中获取数据,那么Grid是正常工作的指令。但是如果我从控制器获得范围数据(相同的json),那么Grid工作正常。

<grid data-type="scope" data="mydata"></dashgrid>

在控制器中使用$ http.get获取数据工作正常。但仍然没有填充网格。

Error:  Uncaught (in promise) TypeError: Cannot read property 'columns' of undefined(…)

问题: 1)http是否异步?是否在$ http.get加载实际数据之前加载了网格 1)在这种情况下,控制器将被实例化(第1行或第2行或第3行)? 2)第2行和第3行有什么区别?第3行是否必要?

1 个答案:

答案 0 :(得分:1)

是的,http是异步的。

是的,显示视图时无需等待获取请求完成,因此您必须确保它在这种情况下正常工作(通过在数据不存在时不显示网格,例如,使用ng-if) 。另一种方法是在状态配置中使用resolve

当路由器切换到归属状态时,控制器被实例化。

第3行将控制器注册到名为&#39; myController&#39;的模块。第2行告诉路由器家庭状态的视图由myController控制

如果您打算在某些视图中使用ng-controller="myController",或者如果您想通过指定控制器的名称而不是控制器功能本身来配置路由,则必须使用第3行:

controller : 'myController'

而不是

controller : myController