【问题标题】:Angular Controller involving 'ui.state' throws error: Argument 'Controller' is not a function, got string涉及“ui.state”的角控制器抛出错误:参数“控制器”不是函数,得到字符串
【发布时间】:2014-10-06 16:31:03
【问题描述】:

我刚刚开始尝试使用来自 github 的 angular-ui-router 来使用状态而不是路由的混乱。我已经编写了一个控制器并将其包含在我所有的捆绑文件、html 等中。但是,当我导航到本地主机上的页面时,它会在 chrome 控制台中引发以下错误:“错误:[ng:areq] Argument ' WeatherCtrl' 不是函数,有字符串"。

以下是我的角码:

Kr.controller("WeatherCtrl", ['ui.state'])
   .config(['$stateProvider',
     function($stateProvider) {

       var weather = {
         name: 'weather',
         url: '/nws',
         abstract: true,
         templateUrl: 'partials/webtools/nws/weatherDefault.html'
       };

       var smallWeather = {
         name: 'smallWeather',
         url: '/nws/shortForecast',
         parent: weather,
         templateUrl: 'partials/webtools/nws/shortForecast'
       };

       var mediumWeather = {
         name: 'mediumWeather',
         url: '/nws/mediumForecast',
         parent: weather,
         templateUrl: 'partials/webtools/nws/mediumForecast'
       };

       var bigWeather = {
         name: 'bigWeather',
         url: '/nws/longForecast',
         parent: weather,
         templateUrl: 'partials/webtools/nws/longForecast'
       };

       $stateProvider
         .state(weather)
         .state(smallWeather)
         .state(mediumWeather)
         .state(bigWeather);
     }
   ]);

这是相关的html代码:

<div ng-controller ="WeatherCtrl">
<div class="span11">
  <ul class="a-btn-group text-center">
    <li ui-sref-active="active" class="item">
      <a ui-sref=".smallWeather" class="btn btn-primary">
      <i class="fa fa-bolt"></i> 6 to 10 Day Forecast</a>
    </li>
    <li ui-sref-active="active" class="item">
      <a ui-sref=".mediumWeather" class="btn btn-primary">
      <i class="fa fa-bolt"></i> 8 to 14 Day Forecast</a>
    </li>
    <li ui-sref-active="active" class="item">
      <a ui-sref=".bigWeather" class="btn btn-primary">
      <i class="fa fa-bolt"></i> Three Month Outlook</a>
    </li>
  </ul>
</div>
<p ui-sref=='weather'>Please select a Forecast Type using the buttons above</p>
</div>

奇怪的是,当页面处于“天气”状态时,段落元素将显示,但我不能确定这是否是因为 ui-sref 被忽略并且段落只是将自身作为独立元素插入。此外,我确实认识到 Angular 应用程序的语法有些古怪,但根据 angular-ui-router 的最新文档,它似乎是正确的。

提前感谢您的帮助!

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

    这个字符串是什么意思?

    Kr.controller("WeatherCtrl", ['ui.state'])
    

    我猜你尝试定义 WeatherCtrl 控制器,但提供了数组 ['ui.state'] 而不是控制器函数。

    试试这个:

    Kr.controller("WeatherCtrl", function($scope) {
       // Controller logic...
    })
    

    【讨论】:

    • @Cain Mathis 我也对此感到困惑。此外,在 HTML 模板中不使用 ng-controller 可能会更简洁......而是在状态定义中指定控制器。您可以将控制器与任何/所有状态关联,就像您将模板与每个状态关联一样。
    • @SunilD。我不确定在状态定义中指定控制器是什么意思。你的意思是这样的:函数($stateProvider.nws)?还是我需要在每个 var 状态中指定这个?
    • @Alexei 这是 github 和 scotch 上提供的文档,它不是 AngularJS 的现货,所以据我了解,它需要稍微不同的语法安排。见:scotch.io/tutorials/javascript/angular-routing-using-ui-router
    【解决方案2】:

    已解决

    对于任何有类似问题的人,我尝试在控制器中定义它。完全错误。我没有意识到这需要在整个应用程序中使用 angular.module 进行定义。

    致任何试图指出我误解的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      相关资源
      最近更新 更多