抽象状態とコントローラーを構文として使用するページの次の状態設定があります。
# 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」インスタンスに変数を割り当て、タイトルコントローラー関数内でこれを行うとしましょう。
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ライブラリのバージョンの違いを見つけようとしています。
ControllerAs機能が正しく機能するためには、コントローラーはthis
の値を返す必要があります。 CoffeeScriptは暗黙的に最終行を返すため、次のように記述する必要があります。
return this
または、vm構文を使用していて、次のように書いている場合:
vm = this
コントローラの最後に書くことができます:
return vm
これが誰かに役立つ場合、私の問題はテンプレート化されたビューを使用することから生じましたが、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'
}
これらの答えは大いに役立つようです。私は別の問題でここに来ました:
私の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'
完璧に機能します。
controllerAs
構文が機能するには、return this;
の最後にcontroller function
が必要です。
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
幸運を。