【问题标题】:Controller not loading up控制器未加载
【发布时间】:2015-10-29 04:08:55
【问题描述】:

我有以下Index.html 文件(我也将divng-view 放在一起):

<ul ng-controller="myController">    
    <li>
        <a href="#/doit">Do it!</a>
    </li>
</ul>

路线配置:

$routeProvider.when('/doit', {
        templateUrl: 'partials/doit.html'
        controller: 'myController'

    });

$routeProvider.otherwise({
        redirectTo: 'index.html'
    });

控制器:

app.controller('myController', ['$scope', '$location', function ($scope, $location) {

        $scope.name = "name";
        alert($scope.name);
        $location.path("/");    

    }]);

奇怪的是,当我点击Do it!链接后,它转到http://localhost:3000/#/doit.htmlmyController的代码在点击后执行,我看到警报弹出),然后我返回到http://localhost:3000/#/index.html(这是我想要的,我把$location.path("/")放在控制器里。

但是,这一次,出于某种原因,控制器代码没有执行。它仅在我刷新页面后运行,即使它已分配给无序列表。有人可以帮忙吗?

【问题讨论】:

  • 通过浏览器的返回按钮返回时不起作用?
  • 好吧,我不能回去,因为一旦我登陆 doit.html,我就会被重定向到 index.html。它可能与 $location.path("/") 有关。文档说它会更改浏览器中的 URL(但是,一旦 Angular 注意到 URL 栏中的更改,它就会查看路由规则并将我重定向到 index.html)。问题是加载 index.html 后控制器代码不运行。 (应该,我有 ng-controller 指令,对吧?)
  • 什么时候出现错误?我不明白
  • 好的,一步一步来:我在 index.html 上。出现警报弹出窗口(它在控制器中 - alert($scope.name);)接下来,我单击 &lt;a href="#/doit"&gt;Do it!&lt;/a&gt;。再次出现警报弹出窗口。它立即将我重定向到index.html(因为$location.path("/")),这一次没有任何反应(没有带有“名称”的警报窗口),即使这个警报窗口应该出现(它在控制器中)。结论 - 这次没有加载控制器......由于某种原因。
  • 我认为这是因为它已经加载了 - 当您在重新加载后单击“执行”时它会出现吗?

标签: javascript html angularjs


【解决方案1】:

你的路线配置应该是这样的:

$routeProvider.
  when('/', {
    templateUrl: '/index.html',
    controller: 'homeCtrl'
  }).
  when('/doit', {
    templateUrl: 'partials/doit.html',
    controller: 'myController'
  }).
  otherwise({
    redirectTo: '/'
  });

并且您不需要在两个地方指定控制器名称,即在部分和您的路由配置中,在配置级别指定就足够了。

doit 视图应该是加载在 ng-view 标记中的视图,因为它是应用程序的一种状态。

【讨论】:

    猜你喜欢
    • 2012-10-18
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多