2014-10-06 55 views
0

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

以下是我的角度代码:

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-ui-router的最新文档,它似乎是正确的。

在此先感谢您的帮助!

回答

2

这个字符串是什么意思?

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

我猜你尝试定义WeatherCtrl控制器,但提供的数组['ui.state']代替控制器的功能。

试试这个:

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

@凯恩马西斯我也对此感到困惑。另外,在HTML模板中不使用ng-controller可能更清晰,而是在状态定义中指定控制器。您可以将控制器与任何/所有状态相关联,就像您将模板与每个状态相关联一样。 – 2014-10-06 17:53:03

+0

@SunilD。通过在状态定义中指定控制器,我不确定你的意思。你的意思是: 函数($ stateProvider.nws)?或者我需要在每个var状态中指定它? – 2014-10-06 18:14:24

+0

@Alexei这是在github和scotch上提供的文档,它不是股票AngularJS,所以,据我了解,它需要稍微不同的语法安排。 参见: http://scotch.io/tutorials/javascript/angular-routing-using-ui-router – 2014-10-06 18:17:28

0

解决

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

任何人试图指出谁是我误解了谁。

相关问题