【问题标题】:Instantiating angular js controller实例化 Angular js 控制器
【发布时间】:2016-07-02 21:05:58
【问题描述】:

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 获取数据,则网格是可以正常工作的指令。但如果我从控制器获取范围数据(相同的 json)则无法正常工作。

<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)在这种情况下,控制器何时会被实例化(line1 或 line 2 或 line3 )? 2)第2行和第3行有什么区别?第3行有必要吗?

【问题讨论】:

  • 1)。当然。 1)。那些都不是。 2)。没有。

标签: angularjs http angular-ui-router


【解决方案1】:

是的,http 是异步的。

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

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

第 3 行将控制器注册到名为“myController”的模块中。第 2 行告诉路由器 home 状态的视图由 myController 控制

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

controller : 'myController'

而不是

controller : myController

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 2015-06-02
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    相关资源
    最近更新 更多