我的控制器干扰了我的ui路由

时间:2015-08-20 04:23:47

标签: angularjs

我有一个使用硬编码值的状态视图的工作原型,但当我试图包含一个控制器时,它打破了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//}]);

1 个答案:

答案 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时路由中断,因为您试图在其内部嵌套相同的控制器。