ng-view - 在模板页面中加载控制器
ng-view - 在模板页面中加载控制器
我有一个模块,我在其中配置了一个路由,如下所示:
var app = angular.module("myModule", ['ui.grid','ui.bootstrap','ngRoute']); app.config(function ($routeProvider) { $routeProvider.when('/subjects', { templateUrl: 'Subjects.aspx', controller: 'SubjectsController' }) }
在模板页面中,我像这样配置控制器:
这样控制器就是未定义的,似乎脚本在页面中没有正确加载。
如果我将脚本移到我的主页面(加载angular模块的地方),控制器就会正确加载。
主页面:
我希望在需要它们的页面上加载各种控制器,以免给应用程序增加负担,因为它们都加载在主页面上。
**** - 编辑 - ****
似乎我可以通过在路由中使用'resolve'来加载脚本:
var resolveController = function (path) { var deferred = $q.defer(); var script = document.createElement('script'); script.src = path; script.onload = function () { $scope.$apply(deferred.resolve()); }; document.body.appendChild(script); return deferred.promise; }; app.config(function ($routeProvider) { $routeProvider.when('/subjects', { templateUrl: 'Subjects.aspx', controller: 'SubjectsController', resolve: resolveController('/Scripts/SubjectController.js') }) }
但是我收到了错误:$q未定义。
这样做正确吗?
问题的原因是在Angular模块文件中,使用了ng-view指令来加载模板页面中的控制器,但是在模板文件中没有指定控制器的位置。
解决方法是在模板文件中添加ng-controller指令,并指定要加载的控制器的名称。
修改后的模板文件如下:
<div id="dvcollection" ng-controller="SubjectsController"> <div style="padding-left: 15px; padding-bottom: 10px;"> <button type="button" id="addRow" class="btn btn-success" data-ng-click="addRow()">Nuovo</button> </div> <div class="gridStyle" data-ui-grid="gridOptions"></div> </div>
这样,ng-view指令就可以正确加载模板页面中的控制器了。
问题的原因是在解析器(resolveController)中没有注入$rootscope,因此代码中的$scope被替换为$rootscope。解决方法是在解析器中注入$rootscope,并将其作为参数传递给解析器函数。以下是修改后的代码:
var resolveController = function ($q, $rootscope) { var deferred = $q.defer(); var script = document.createElement('script'); script.src = '/Scripts/SubjectController.js'; script.onload = function () { $rootscope.$apply(deferred.resolve()); }; document.body.appendChild(script); return deferred.promise; }; app.config(function ($routeProvider) { $routeProvider.when('/subjects', { templateUrl: 'Subjects.aspx', controller: 'SubjectsController', resolve: { resolveController: resolveController } }) });
希望这对你有所帮助。在这个问题中,你可以找到关于这个主题的有趣讨论。
在模板页面中,有一个问题出现了,即ng-view无法加载控制器。原因是在模板中存在一个错误的控制器名称,导致ng-view无法正确加载对应的控制器。
解决这个问题的方法是在模板中移除data-ng-controller="SubjectController"。另外,还需要确认控制器的名称是否正确。在这个例子中,有人提醒检查SubjectController的名称是否正确,但最后确认是一个写错的错误。
以下是整理好的
在模板页面中,遇到了一个问题,即ng-view无法加载控制器。经过排查,发现问题出现在模板中错误的控制器名称。解决这个问题的方法是在模板中移除data-ng-controller="SubjectController"。另外,还需要确认控制器的名称是否正确。在这个例子中,有人提醒检查SubjectController的名称是否正确,但最后确认是一个写错的错误。
代码示例:
正确的做法是移除data-ng-controller属性:
通过以上的修正和确认,问题得到了解决。