2015-10-13 34 views
1

在我$routeProvider我有這樣的事情,如果我的路線提供商內部條件

$routeProvider.when('/person/:name/:label', { ... 

我想要做的就是添加一個特殊情況是什麼,這將幫助我,如果:name顯示不同的模板,例如,等於與'約翰'。

我試圖用這樣的事情是:

$routeProvider.when('/person/:name/:label', { 
    templateUrl: function(param) { 
    if(param=='John') { 
     return 'john.html'; 
    } 
    return 'generic.html'; 
    }, 
    controller: 'PersonCtrl' 
}); 

我一直得到generic.html雖然。我如何訪問名稱變量並解決此問題?

+2

使用'param.name'而不是'param',你應該很好去。 –

回答

1

傳遞給templateUrl函數的params對象就像$ routeParams一樣訪問。因此,就像在$ routeParams中一樣,您需要使用點運算符來訪問預配屬性。所以在你的情況下,這是params.name

$routeProvider.when('/person/:name/:label', { 
    templateUrl: function(params) { 
    return params.name == 'John' ? 'john.html' : 'generic.html'; 
    }, 
    controller: 'PersonCtrl' 
}); 
+0

試圖添加routeParams的方式如下 '.config(['$ routeProvider','$ routeParams',function($ routeProvider,$ routeParams){'給我一個'錯誤:[$ injector:unpr]未知提供者:$ routeParams'錯誤 – dearn44

+0

我看到你在註釋後標記爲正確,現在一切正常? – Devnetics

+1

您不需要使用'$ routeParams'對象來訪問'templateUrl'函數中的參數。根據[文檔](https ://docs.angularjs.org/api/ngRoute/provider/$routeProvider),你的templateUrl函數將被傳遞一個提供的參數數組,所以你只需要'params.name'。 –