2017-01-25 45 views
0

我正在轉向我的angular 1.x應用程序中的無狀態組件。在ui路由器中傳遞stateParams

我從控制器代碼中移除了所有數據加載,並且我使用了ui-routerresolve功能。由於我在同一個$state中使用$state轉換處理每個內部狀態更改,因此我不想從後端獲取所有數據,只有在需要時才需要(我需要不同的數據)。

爲了獲得這種行爲,我非常依賴params。例如:

... 
.state('myapp.child', { 
    url: '/child', 
    controller: function ($state, foo, bar) { 
    function someEvent() { 
     // Provision $stateParams to prevent fetching 
     $state.go($state.current, {foo: foo, bar:bar}); 
    } 
    }, 
    params: { 
    foo: null, 
    bar: null 
    }, 
    resolve: { 
    /** 
    * @ngInject 
    */ 
    foo: function(fooService, $stateParams) { 
     if ($stateParams.foo !== null) { // <= Duplication 
     return foo; 
     } else { 
     return fooService.get(); 
     } 
    }, 
    /** 
    * @ngInject 
    */ 
    bar: function(barService, $stateParams) { 
     if ($stateParams.bar !== null) { // <= Duplication 
     return bar; 
     } else { 
     return barService.get(); 
     } 
    } 
    } 
}); 

我的問題是:有沒有什麼辦法可以直接告訴路由器解決這些值?還是有一個很好的方法來避免在解析塊中進行空檢查?

回答

0

你可以使用三元和ES6(儘管ES6只是lambda)來清理它一點點。我添加了lodash函數,但您可以簡單地使用===檢查,因爲您已經:

bar: function(barService, $stateParams) => 
    return !_.isNull($stateParams.bar) ? $stateParams.bar : barService.get() 
+0

我在某些地方使用此功能,但行數往往會變得太長。我正在尋找的是一種自動解析'bar'的方法。或者把'$ state.go'中的那個對象作爲一個分辨率而不是$ stateParams。 – fodma1

+0

如果你想先解決,然後將其作爲$ stateParams在$ state.go中傳遞,那麼你就錯過了ui-router的要點。決議是在那裏做的。線條變得「太長」似乎更多的是審美方面,而不是功能性編程方面。 – rrd

相關問題