2016-08-10 30 views
0

我無法從預先載入組件控制器的ui路由器獲取解析數據(通過解析對象)。屬性顯示在組件的this對象中,但所有屬性均未定義。這是爲什麼發生?我一直停留在這個現在一段時間...Angular 1.5 - UI-Router,解析Object返回未定義的值

這裏的組件:

.component('wLoans', { 
    template: require('./loans.html'), 
    controller: LoansController, 
    bindings: { 
     settings: '<', 
     labels: '<' 
    } 
    }); 

this.settings和this.labels出現,但他們是不確定的。當我在下面的resolve.settings console.log中,我可以看到承諾本身。在下面的承諾,value包含返回的數據我想:enter image description here

下面

是我與UI路由器工作狀態:是從被呼叫的服務獲取功能

{ 
     name: 'loans', 
     parent: 'app', 
     url: '/loans', 
     data: { 
     authRequired: true 
     }, 
     views: { 
     content: { 
      template: '<w-loans></w-loans>' 
     } 
     }, 
     resolve: { 
     labels(LabelService) { 
      'ngInject'; 
      return LabelService.fetch(); 
     }, 
     settings(SettingsService) { 
      'ngInject'; 
      console.log(SettingsService.fetch()); 
      return SettingsService.fetch() 
     }, 
     module($q, $ocLazyLoad, LabelService) { 
      'ngInject'; 
      return $q((resolve) => { 
      require.ensure([], (require) => { 
       let mod = require('pages/loans'); 
       $ocLazyLoad.load({ name: mod.name }); 
       resolve(mod.name, LabelService.fetch()); 
      }, 'loans'); 
      }); 
     } 
     } 
    } 

這裏路線:

function fetch() { 
     // return $http.get(require('!!file!mocks/settings.json'), { 
    return $http.get(`${DEV_API_URL}/settings`, { 
     cache: settingsCache, 
     transformResponse: [ 
     ...$http.defaults.transformResponse, 
     transformResponse 
     ] 
    }) 
     .then(({ data }) => { 
     angular.extend(model, data); 
     settingsCache.put('store', model); 
     return model; 
     }); 
    } 

任何幫助表示讚賞!

更新:使用UI路由器1.0.0-beta.1

回答

1

只要你不使用1.0.0(目前是測試版)的用戶界面路由器的版本是沒有辦法直接使用的組件。對於測試版本,請參閱此討論:https://github.com/angular-ui/ui-router/issues/2627。還有關於如何使用路由組件與解決了一個教程:https://ui-router.github.io/tutorial/ng1/hellogalaxy

你在做什麼這裏是創建一個名爲狀態與loans這將指派解決數據的隱式控制器和範圍。然後在模板中實例化組件,但不傳遞任何所需的屬性。

所以如果你想在0.2.x ui-router上使用你的組件,你需要添加一些虛擬控制器來獲得注入的解析屬性,然後通過模板將虛擬控制器的值傳遞給組件

<w-loans settings="settings" .../> 

根據您的UI路由器的版本有多新(?0.3.X),你也許可以使用新引進的$resolve財產,以避免創建一個虛擬控制器是這樣的:

<w-loans settings="$resolve.settings" ...></w-loans> 

詳情在這裏: https://github.com/angular-ui/ui-router/issues/2793#issuecomment-223764105

+0

我使用的是測試版。讓我用那個信息更新我的問題 – devdropper87

+1

太好了。然後直接使用你的組件是非常簡單的。甚至還有一個教程,涵蓋了beta文檔頁面中組件的處理方式:https://ui-router.github.io/tutorial/ng1/hellogalaxy –

+0

嘿安德烈亞斯,關於這個問題的任何想法也涉及到UI路由器? HTTP://計算器。com/questions/39277446 /無法調用 - uicanexit-angular-ui-router-1-0-0-beta – devdropper87

0

我有一個與Angular 1.6類似的問題,它看起來像這個版本的不同行爲。我的觀點是在諾言解決後呈現的,但我認爲之前調用了控制器。它的工作原理我使用$的OnInit像angular docs提出了:

.component('myComponent', { 
    bindings: {value: '<'}, 
    controller: function() { 
    this.$onInit = function() { 
     // do somthing with this.value 
    }; 
    } 
}) 

https://github.com/angular/angular.js/issues/15545