对于使用抽象状态和控制器作为语法的页面,我有以下状态设置:
# Details page route
.state 'title',
url: '/title',
abstract: true,
template: '<ui-view/>',
.state 'title.show',
url: '/:titleId',
templateUrl: 'title/show.html'
controller: 'Title as t'
出于本演示的目的,我可以说我将一个变量分配给'Title'控制器的't'实例,我在Title控制器函数中执行此操作。
angular.module('title').controller 'Title',
['$state', ($state) ->
this.name = 'Test'
在我的视图'title / show.html'中,我尝试打印出刚创建的变量到页面:
{{t.name}}
我什么都没看到。但是,如果我将ui-router的控制器移到包含'title / show.html'页面的元素上,如下所示:
<div ng-controller="Title as t">
然后一切都很好。有没有人遇到过这个问题。我在其他应用程序中工作正常,所以我仍然想弄清楚这个应用程序可能有什么不同,可能是js库版本的差异。
答案 0 :(得分:43)
在您的州配置中:
而不是controller: 'Title as t'
,请尝试:
controller: 'Title',
controllerAs: 't'
修改:刚刚使用ui-router
实施了一个最小应用,语法controller: Title as t
也适用于ui-router
版本0.2.0中的最新版本截至今日。当我检查角度范围时,我可以看到t
实例。
答案 1 :(得分:12)
您的控制器需要返回this
的值才能使controllerAs功能正常工作。由于CoffeeScript隐式返回最后一行,因此您需要编写:
return this
或者如果您使用的是vm语法并且已写入:
vm = this
你可以在控制器的最后写一下:
return vm
答案 2 :(得分:10)
如果这可以帮助任何人,我的问题来自使用模板化视图,但在views元素之外指定controllerAs。这需要永远弄明白。感谢此帖子https://github.com/driftyco/ionic/issues/3058
**错误**
views: {'content@': { templateUrl: 'views/listing.html' }},
controller: 'ListingCtrl',
controllerAs: 'ctrl'
**正确**
views: {
'content@': { templateUrl: 'views/listing.html' },
controller: 'ListingCtrl',
controllerAs: 'ctrl'
}
答案 3 :(得分:1)
似乎这些答案可能会起作用很多。我带着不同的问题来到这里:
在我的UI Router
Javascript文件中,我的controllers
定义如下:
state('groupHome', {
url: '/groupHome',
templateUrl: 'app/modules/group-home/groupHome.html',
controller: 'GroupHomeController',
controllerAs: 'groupHomeController'
在我的模板文件中,如果我尝试访问名为groupHomeController
的控制器,则无法访问。
但另一方面,当我将代码更改为此时:
state('groupHome', {
url: '/groupHome',
templateUrl: 'app/modules/group-home/groupHome.html',
controller: 'GroupHomeController as groupHomeController'
完美无缺。
答案 4 :(得分:0)
您需要在return this;
末尾controller function
controllerAs
语法才能正常工作。
angular.module('title').controller 'Title',
['$state', ($state) ->
this.name = 'Test'
return this
如果您使用 $scope
,则必须改为return $scope
。
angular.module('title').controller 'Title',
['$state','$scope', ($state, $scope) ->
$scope.name = 'Test'
return $scope
祝你好运。