Конкретные переменные сферы в строку в выражении angular
Я использую метод scope в директиве angular ng-click, например:
<a ng-click="$navigate.go('#/path/obj.val1/obj.val2')">{{obj.val1}}, {{obj.val2}}</a>
Проблема заключается в том, что obj.val1 и obj.val2 интерпретируются как часть строки, переданной методу в выражении. Мне нужно, чтобы их оценивали как переменные, которые они... Я не уверен, какой правильный подход здесь.
Есть ли способ angular для объединения этих значений в эту строку/выражение?
Я просто "делаю это неправильно"?
Ответы
Ответ 1
Не очень понятно, в чем проблема, и что вы пытаетесь выполнить из кода, который вы опубликовали, но я возьму на него удар.
В общем, я предлагаю вызвать функцию на ng-click так:
<a ng-click="navigateToPath()">click me</a>
obj.val1
и obj.val2
должны быть доступны в вашем пробеле контроллера $, вам не нужно передавать их в функцию из разметки.
то в вашем контроллере:
$scope.navigateToPath = function(){
var path = '/somePath/' + $scope.obj.val1 + '/' + $scope.obj.val2; //dont need the '#'
$location.path(path)
}
Ответ 2
Я создал рабочий пример CodePen, демонстрирующий, как это сделать.
Соответствующий HTML:
<section ng-app="app" ng-controller="MainCtrl">
<a href="#" ng-click="doSomething('#/path/{{obj.val1}}/{{obj.val2}}')">Click Me</a><br>
debug: {{debug.val}}
</section>
Соответствующий javascript:
var app = angular.module('app', []);
app.controller('MainCtrl', function($scope) {
$scope.obj = {
val1: 'hello',
val2: 'world'
};
$scope.debug = {
val: ''
};
$scope.doSomething = function(input) {
$scope.debug.val = input;
};
});
Ответ 3
Вы можете просто контактировать значения с помощью +
<a ng-click="$navigate.go('#/path/' + obj.val1 + '/' + obj.val2)">{{obj.val1}}, {{obj.val2}}</a>
Простой пример в jsfiddle
Я уверен, что код, который вы опубликовали, является упрощенным примером, если ваше построение пути более сложное, я бы рекомендовал извлечь функцию (или службу), которая построила бы ваши URL-адреса, чтобы вы могли эффективно писать unit test.
Ответ 4
<a ngHref="/path/{{obj.val1}}/{{obj.val2}}">{{obj.val1}}, {{obj.val2}}</a>