我有一个使用硬编码值的状态视图的工作原型,但当我试图包含一个控制器时,它打破了ui-sref链接,并且它们似乎没有指向任何东西。我可以删除ng-controller属性,然后它们再次工作,并显示正常。
我也尝试将ng-controller附加到模板中的div,完全在index.html中引用一个控制器,虽然这并没有打破链接,但我不能让模板中的任何表达式都能正常工作,如果我可以避免使用控制器,那么对于我的应用程序而言,控制器将是次优的。
我误解了控制器和观点的哪些限制?
index.html代码段
<div class="main" ng-controller="MainCtrl">
<a ui-sref="StateA">AAAAA</a>
<div ui-view></div>
</div>
app.js
var app = angular.module('app', ['ui.router']);
app.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('StateA', {
url: "/a",
templateUrl: "views/a.html",
controller: "MainCtrl"
})
});
MainCtrl.js
app.controller("MainCtrl", [$scope, function($scope, paramGroups) {//empty controller//}]);
答案 0 :(得分:1)
除了你的基本问题上的一些语法错误之外,还要了解ui-router的工作原理。
当您定义类似的内容时:
.state('StateA', {
url: "/a",
templateUrl: "views/a.html",
controller: "MainCtrl"
})
这意味着,当您前往路由/a
时,将在a.html
中呈现的部分ui-view
将获得MainCtrl
的范围。
在ng-controller='MainCtrl'
的父级元素上定义ui-view
没有意义,因为ui-view
会在路由结算时自动获取MainCtrl
的范围。
当您声明ng-controller
时路由中断,因为您试图在其内部嵌套相同的控制器。