AngularJS: ngInclude и динамические URL-адреса
Я использую директиву ngInclude
для загрузки фрагментов HTML. Теперь я ищу лучший способ передать динамический URL. Я знаю, что могу создать URL с конкатенацией строк:
<ng-include src="'/foo/' + fooId + '/bar/' + barId + '/baz/' + bazId"></ng-include>
В моих глазах это немного уродливо.
ngHref
и ngSrc
, например, принять URL-адреса, содержащие разметку {{}}
. ИМХО этот синтаксис намного чище:
<img ng-src="/foo/{{fooId}}/bar/{{barId}}/baz/{{bazId}}"/>
<a ng-href="/foo/{{fooId}}/bar/{{barId}}/baz/{{bazId}}"/>
Есть ли лучший способ передать динамические URL-адреса для ngInclude?
Ответы
Ответ 1
Не уверен, что это "лучше" или нет, но вы можете создать функцию в своей области, чтобы инкапсулировать это.
app.controller("MyCtrl", function($scope) {
$scope.fooId = "123";
$scope.barId = "abc";
$scope.bazId = "abc";
$scope.templateUrl = function() {
return "/foo/"+ $scope.fooId +"/bar/"+ $scope.barId +"/baz/"+ $scope.bazId;
}
});
Тогда вы будете использовать его так...
<div ng-controller="MyCtrl">
<ng-include src="templateUrl()"></ng-include>
</div>
Вот живой пример такого типа вещей: http://plnkr.co/edit/Lu3icqPgg1dpNCj6a3Dn?p=preview
Ответ 2
@jessegavin лучше использовать этот код
<ng-include ng-init="tmplUrl = templateUrl();" src="tmplUrl"></ng-include>
если вы будете использовать этот способ
<ng-include src="templateUrl()"></ng-include>
templateUrl вызывает несколько раз. (3 раза). попробуйте console.log. Я думаю, из-за $var varles
$scope.templateUrl = function() { var url = "/foo/" + $scope.fooId + "/bar/" + $scope.barId + "/baz/" + $scope.bazId; console.log(URL); return url; }