将自定义参数传递给状态解析函数

时间:2016-06-16 12:43:02

标签: angularjs angular-ui-router

是否可以将可选参数传递给已配置状态的解析函数?

类似

resolve: {
    resA: getSomething(1),
    resB: getSomethingElse
}


function getSomething(num) {
    if(num===1) {
        //do something here
    }
    return something
}

function getSomethingElse() {
) 

我希望在其他状态下重用resolve函数,但在某些情况下我需要在函数内部执行不同的逻辑。

有人可以提供一些建议吗?

由于

修改

好的,所以我实际上正在考虑将自定义参数传递给依赖于早期解析函数的解析函数。

resolve: {
    resA: getSomething,
    resB: getSomethingElse(1)
}

function getSomething() {
    return something
}

function getSomethingElse(num, resA) {

) 

在这个例子中,第二个解析会在状态被命中时立即被触发,并且不会等到resA得到解决,所以我可以在num param {console}。 {1}}在此时未定义。

1 个答案:

答案 0 :(得分:1)

让我们举个例子:

resolve: {
  resA: getSomething,
  resB: getSomethingElse(1)
}

resA和resB的值必须是函数。这是resA的情况。对于resB,仅在getSomethingElse(1)返回函数时才是这种情况。所以getSomethingElse必须看起来像

function getSomethingElse(value) {
    return function() {
        // ...
    }
}

假设getSomething返回'你好'。我们假设您希望getSomethingElse(1)返回的函数使用该值hello。因此,您需要告诉ui-router resB引用的函数需要resA的结果作为参数:

function getSomethingElse(value) {
    return function(resA) { // the name of the argument MUST BE resA. This function will be injected 
        // ...
    }
}

现在你可以在该函数中同时使用value和resA。例如,根据值和resA执行http调用:

function getSomethingElse(value) {
    return function($http, resA) { 
        if (value === 0) {
            return $http.get('/zero').then(...);
        }
        else {
            return $http.get('/one/' + resA).then(...);
        }
    }
}