상태 ''에서 '…'을 (를) 확인할 수 없습니다.


98

ui-router를 사용하는 것은 이번이 처음입니다.

여기 내 app.js가 있습니다.

angular.module('myApp', ['ionic'])

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }
  });
})

.config(function($stateProvider, $urlRouterProvider){
  $urlRouterProvider.otherwise("/index.html");

  $stateProvider.state('index', {
    url: '/'
    template: "index.html",
    controller: 'loginCtrl'
  });


  $stateProvider.state('register', {
    url: "/register"
    template: "register.html",
    controller: 'registerCtrl'
  });
})

보시다시피 두 가지 상태가 있습니다. 다음과 같이 상태를 등록하려고합니다.

<a ui-sref="register">
  <button class="button button-balanced">
    Create an account
  </button>
</a>

하지만 나는 점점

상태 ''에서 '등록'을 해결할 수 없습니다.

예외. 여기서 문제는 무엇입니까?


이것은 일종의 어리석은 일이지만 모듈 'myApp'을 만들고 'ionic'을 종속성으로 나열하고 있지만 'ui-router'가 종속성으로 나열된 것을 보지 않습니다. 다른 곳에 포함하고 있습니까?
deadbabykitten

3
@deadbabykitten, ionic이 처리합니다.
Rogers Sampaio 2015

1
@RogersSampaio-최근에 ionic을 사용하지 않았는데 지금은 모바일 프로젝트에 사용하고 있다는 사실을 방금 알게되었습니다. 꽤 놀랍습니다.
deadbabykitten 2015

답변:


69

이러한 종류의 오류는 일반적으로 (JS) 코드의 일부가로드되지 않았 음을 의미합니다. 안에있는 상태 ui-sref가없는 것.

작업 예

나는 이오니아 전문가가 아니기 때문에이 예제는 작동 할 것임을 보여 주어야하지만 더 많은 트릭을 사용했습니다 (탭의 부모)

이것은 약간 조정 된 상태 정의입니다.

.config(function($stateProvider, $urlRouterProvider){
  $urlRouterProvider.otherwise("/index.html");

    $stateProvider

    .state('app', {
      abstract: true,
      templateUrl: "tpl.menu.html",
    })

  $stateProvider.state('index', {
    url: '/',
    templateUrl: "tpl.index.html",
    parent: "app",
  });


  $stateProvider.state('register', {
    url: "/register",
    templateUrl: "tpl.register.html",
    parent: "app",
  });

  $urlRouterProvider.otherwise('/');
}) 

그리고 여기에 탭과 그 내용이있는 상위 뷰가 있습니다.

<ion-tabs class="tabs-icon-top">

  <ion-tab title="Index" icon="icon ion-home" ui-sref="index">
    <ion-nav-view name=""></ion-nav-view>
  </ion-tab>

  <ion-tab title="Register" icon="icon ion-person" ui-sref="register">
    <ion-nav-view name=""></ion-nav-view>
  </ion-tab>

</ion-tabs>

실행하는 방법에 대한 예제 이상을 취하고 나중에 ionic 프레임 워크를 올바른 방법으로 사용하십시오 ... 여기에서 해당 예제를 확인 하십시오.

다음은 명명 된 뷰 (더 나은 솔루션을 위해) 이온 라우팅 문제 를 사용하는 예제와 유사한 Q & A입니다. 빈 페이지가 표시됩니다.

탭에 명명 된 뷰가있는 개선 된 버전은 다음과 같습니다. http://plnkr.co/edit/Mj0rUxjLOXhHIelt249K?p=preview

  <ion-tab title="Index" icon="icon ion-home" ui-sref="index">
    <ion-nav-view name="index"></ion-nav-view>
  </ion-tab>

  <ion-tab title="Register" icon="icon ion-person" ui-sref="register">
    <ion-nav-view name="register"></ion-nav-view>
  </ion-tab>

명명 된 뷰 타겟팅 :

  $stateProvider.state('index', {
    url: '/',
    views: { "index" : { templateUrl: "tpl.index.html" } },
    parent: "app",
  });


  $stateProvider.state('register', {
    url: "/register",
    views: { "register" : { templateUrl: "tpl.register.html", } },
    parent: "app",
  });

내 경로는 괜찮아 보이고 다른 이온 예제를 확인했으며 코드는 동일하게 보입니다. 일부 디버거, console.log 및 경고를 해당 구성 기능에 넣고 실행되지 않았습니다. 내 경로가로드되었는지 어떻게 확인할 수 있습니까? 어떻게 든 볼 수 있나요?
Sefa

4
어떤 상태가 등록되어 있는지 궁금하다면 일반적으로 $ state 정보를 .run () 메서드에 삽입합니다. 그런 다음 상태 배열을 반환하는 console.log ($ states.get ())을 수행 할 수 있습니다. .run ($state) { console.log($states.get()); });
deadbabykitten 2015 년

37

나에게 일어난 일을 공유하기 위해 여기에 왔습니다.
부모를 지정할 필요가 없으며 상태는 문서 지향 방식으로 작동하므로 parent : app을 지정하는 대신 상태를 app.index로 변경할 수 있습니다.

.config(function($stateProvider, $urlRouterProvider){
    $urlRouterProvider.otherwise("/index.html");

$stateProvider.state('app', {
  abstract: true,
  templateUrl: "tpl.menu.html"
});

$stateProvider.state('app.index', {
    url: '/',
    templateUrl: "tpl.index.html"
});

$stateProvider.state('app.register', {
    url: "/register",
    templateUrl: "tpl.register.html"
});

편집 경고, 중첩에 깊이 들어가려면 전체 경로를 지정해야합니다. 예를 들어, 다음과 같은 상태를 가질 수 없습니다.

app.cruds.posts.create

없이

app
app.cruds
app.cruds.posts

또는 angular는 패배를 파악할 수 없다는 예외를 던집니다. 이를 해결하기 위해 추상적 인 상태를 정의 할 수 있습니다.

.state('app', {
     url: "/app",
     abstract: true
})
.state('app.cruds', {
     url: "/app/cruds",
     abstract: true
})
.state('app/cruds/posts', {
     url: "/app/cruds/posts",
     abstract: true
})

9
고마워요 EDIT Warning, if you want to go deep in the nesting, the full path must me specified. For example, you can't have a state like, 그게 제 문제였습니다.
Max

위와 같은 문제가 있었지만 경로 경로에 반영되지 않는 상태 이름 경로에 무언가를 포함하고 싶었으므로 url중간 상태 의 속성을 제외 할 수 있습니다. 그러면 다음 경로 url가 추가됩니다. 이전 경로 URL.
Nick M

7

Ionic에서 이와 동일한 문제가 발생했습니다.

내 코드에 아무 문제가 없다는 것이 밝혀졌습니다. 간단히 ionic serve 세션을 종료하고 ionic serve를 다시 실행해야했습니다.

앱으로 돌아간 후 내 상태는 잘 작동했습니다.

gulp를 실행하는 경우 app.js 파일에서 저장을 몇 번 눌러 모든 것이 다시 컴파일되는지 확인하는 것이 좋습니다.


1
제 경우에는 서버를 다시 시작해도 문제가 해결되지 않았지만 디버그 할 때 더 나은 오류가 발생했습니다. 감사!
Magus

3

Ionic 라우팅과 동일한 문제가있었습니다.

간단한 해결책은 기본적으로 상태 이름을 사용하는 것입니다. state.go(state name)

.state('tab.search', {
    url: '/search',
    views: {
      'tab-search': {
        templateUrl: 'templates/search.html',
        controller: 'SearchCtrl'
      }
    }
  })

그리고 컨트롤러에서 사용할 수 있습니다 $state.go('tab.search');


2

오류가 발생한 경우가 있습니다.

$state.go('');

분명합니다. 나는 이것이 미래에 누군가를 도울 수 있다고 생각합니다.


1

Magus의 답변 :

전체 경로를 지정해야합니다.

추상 상태를 사용하여 모든 하위 상태 URL에 접두사를 추가 할 수 있습니다. 그러나 abstract는 자식이 . 그렇게하려면 간단히 인라인으로 추가하면됩니다.

.state('app', {
   url: "/app",
   abstract: true,
   template: '<ui-view/>'
})

자세한 내용은 https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views 문서를 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.