programing

UI 라우터에서 '컨트롤러'를 사용하는 것이 예상대로 작동하지 않습니다.

oldcodes 2023. 10. 11. 20:58
반응형

UI 라우터에서 '컨트롤러'를 사용하는 것이 예상대로 작동하지 않습니다.

추상 상태와 컨트롤러를 구문으로 사용하는 페이지에 대해 다음과 같은 상태 설정이 있습니다.

# 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 라우터의 컨트롤러를 제거하고 'title/show.html' 페이지를 감싸는 요소 위에 다음과 같이 표시합니다.

<div ng-controller="Title as t">

그러면 모든 것이 잘 됩니다.전에 이 문제를 발견한 사람이 있습니까?나는 다른 앱에서 잘 작동하기 때문에 이 앱에서 무엇이 다를 수 있는지, 아마도 js 라이브러리 버전의 차이를 알아내려고 여전히 노력하고 있습니다.

상태 구성에서:

대신에controller: 'Title as t', 시도:

controller: 'Title',
controllerAs: 't'

편집 : 방금 최소한의 앱을 구현했습니다.ui-router그리고 구문.controller: Title as t의 버전 0.2.0에서도 작동합니다.ui-router오늘 현재 가장 최근의 것으로.저는 알 수 있어요.t예를 들어 각도 범위를 검사할 때.

컨트롤러가 다음 값을 반환해야 합니다.this컨트롤러 As 기능이 제대로 작동하도록 합니다.CoffeeScript는 암시적으로 마지막 줄을 반환하므로 다음과 같이 써야 합니다.

return this

또는 vm 구문을 사용하고 있고 다음을 작성한 경우:

vm = this

컨트롤러 맨 끝에 다음과 같이 쓸 수 있습니다.

return vm

이것이 템플릿 뷰를 사용하면서도 뷰 요소 외부에 컨트롤러를 지정하는 데서 문제가 발생한 사람에게 도움이 되는 경우.이것을 알아내는 데는 오랜 시간이 걸렸습니다. 스레드 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자바스크립트 파일, 나의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'

완벽하게 잘 작동합니다.

당신은 해야 할 것입니다.return this;당신의 최후에controller function를 위해controllerAs일의 구문

angular.module('title').controller 'Title',
 ['$state', ($state) ->
   this.name = 'Test'
   return this

함께 일하시는 분들은 다음과 같이 하셔야 합니다.return $scope대신.

angular.module('title').controller 'Title',
 ['$state','$scope', ($state, $scope) ->
   $scope.name = 'Test'
   return $scope

행운을 빌어요.

언급URL : https://stackoverflow.com/questions/28953289/using-controller-as-with-the-ui-router-isnt-working-as-expected

반응형