Không thể giải quyết '…' từ trạng thái ''


98

Đây là lần đầu tiên tôi sử dụng ui-router.

Đây là app.js của tôi

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'
  });
})

Như bạn thấy, tôi có hai trạng thái. Tôi đang cố gắng đăng ký trạng thái như thế này:

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

Nhưng tôi đang nhận được

Không thể giải quyết 'đăng ký' từ trạng thái ''

ngoại lệ. vấn đề ở đây là gì?


Điều này hơi ngớ ngẩn, nhưng tôi thấy bạn đang tạo mô-đun 'myApp' và đang liệt kê 'ionic' là một phụ thuộc, tuy nhiên, tôi không thấy 'ui-router' được liệt kê là một phụ thuộc. Bạn có đưa nó vào một nơi khác không?
deadbabykitten

3
@deadbabykitten, ionic lo việc đó.
Rogers Sampaio

1
@RogersSampaio - Tôi vừa phát hiện ra rằng gần đây, tôi đã không sử dụng ionic trước đây, nhưng hiện đang sử dụng nó cho một dự án di động. Nó khá là khó tin.
deadbabykitten,

Câu trả lời:


69

Loại lỗi này thường có nghĩa là một số phần của mã (JS) không được tải. Trạng thái bên trong ui-srefbị thiếu.

một ví dụ làm việc

Tôi không phải là chuyên gia về ion, vì vậy ví dụ này sẽ cho thấy rằng nó sẽ hoạt động, nhưng tôi đã sử dụng thêm một số thủ thuật (cha mẹ cho các tab)

Đây là một chút điều chỉnh trạng thái def:

.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('/');
}) 

Và ở đây chúng tôi có chế độ xem gốc với các tab và nội dung của chúng:

<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>

Lấy nó hơn là một ví dụ về cách làm cho nó chạy và sau này sử dụng ionic framework đúng cách ... Kiểm tra ví dụ đó ở đây

Đây là phần Hỏi & Đáp tương tự với một ví dụ sử dụng các chế độ xem được đặt tên (chắc chắn là giải pháp tốt hơn) vấn đề định tuyến ion, hiển thị trang trống

Phiên bản cải tiến với các chế độ xem được đặt tên trong tab có tại đây: 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>

nhắm mục tiêu các chế độ xem được đặt tên:

  $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",
  });

Các tuyến đường của tôi trông ổn, tôi đã kiểm tra các ví dụ ion khác và mã của tôi trông giống nhau. Tôi đặt một số trình gỡ lỗi, console.log và cảnh báo vào chức năng cấu hình đó và không ai trong số chúng được thực thi. Làm cách nào để đảm bảo rằng các tuyến đường của tôi đã được tải? tôi có thể nhìn thấy chúng bằng cách nào đó không?
Sefa

4
Nếu tôi tò mò muốn xem những tiểu bang nào được đăng ký, tôi thường sẽ đưa vào phương thức .run () $ state info. Sau đó, bạn có thể thực hiện console.log ($ state.get ()) sẽ trả về một mảng trạng thái. .run ($state) { console.log($states.get()); });
deadbabykitten

37

Chỉ đến đây để chia sẻ những gì đã xảy ra với tôi.
Bạn không cần chỉ định cha mẹ, các trạng thái hoạt động theo hướng tài liệu, vì vậy, thay vì chỉ định cha mẹ: app, bạn chỉ có thể thay đổi trạng thái thành 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"
});

CHỈNH SỬA Cảnh báo, nếu bạn muốn đi sâu vào lồng, tôi phải chỉ định đường dẫn đầy đủ. Ví dụ: bạn không thể có trạng thái như

app.cruds.posts.create

mà không có một

app
app.cruds
app.cruds.posts

hoặc angle sẽ đưa ra một ngoại lệ nói rằng nó không thể tìm ra lộ trình. Để giải quyết vấn đề đó, bạn có thể xác định các trạng thái trừu tượng

.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
Cảm ơn vì 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, đó là vấn đề của tôi.
Tối đa

Tôi đã gặp vấn đề tương tự như ở trên, nhưng cũng muốn bao gồm một cái gì đó trong đường dẫn tên tiểu bang của tôi mà không được phản ánh trong đường dẫn tuyến, vì vậy bạn có thể loại trừ thuộc urltính của trạng thái giữa và sau đó tuyến đường sau urlsẽ được thêm vào url tuyến đường trước đó.
Nick M

7

Tôi vừa gặp vấn đề tương tự với Ionic.

Hóa ra không có gì sai với mã của tôi, tôi chỉ đơn giản là phải thoát phiên giao bóng ion và chạy lại giao bóng ion.

Sau khi quay lại ứng dụng, trạng thái của tôi hoạt động tốt.

Tôi cũng khuyên bạn nên nhấn lưu trên tệp app.js của bạn một vài lần nếu bạn đang chạy gulp, để đảm bảo mọi thứ được biên dịch lại.


1
Trong trường hợp của tôi, việc khởi động lại máy chủ không giải quyết được sự cố nhưng đã giúp tôi có một lỗi tốt hơn để gỡ lỗi. Cảm ơn!
Magus

2

Tôi đã gặp trường hợp lỗi do

$state.go('');

Đó là điều hiển nhiên. Tôi đoán điều này có thể giúp ai đó trong tương lai.


2

Gặp vấn đề tương tự với định tuyến Ionic.

Giải pháp đơn giản là sử dụng tên của tiểu bang - về cơ bản state.go(state name)

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

Và trong bộ điều khiển, bạn có thể sử dụng $state.go('tab.search');


1

Như câu trả lời của Magus:

tôi phải chỉ định đường dẫn đầy đủ

Trạng thái trừu tượng có thể được sử dụng để thêm tiền tố vào tất cả các url trạng thái con. Nhưng lưu ý rằng trừu tượng vẫn cần một ui-view để các con của nó có thể điền vào . Để làm như vậy, bạn chỉ cần thêm nó vào dòng.

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

Để biết thêm thông tin, hãy xem tài liệu: https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.