Выполнение этого будет работать, но только для строк.
<p><a href='javascript:display("{{ user.firstName }}");'>{{ user.firstName }}</a>
Это может быть немного глубокого погружения в Угловое, но вы должны думать о реализации фабрики, которая может явно обрабатывать такое поведение для вас.
Мы можем сделать функцию, которая принимает имя и любое количество аргументов и передает аргументы функции Javascript с этим именем. Он может работать следующим образом:
<a ng-click='callJS("display", user.firstName)'></a>
И это может быть реализовано довольно простым способом.
// register a new factory on our module
app.factory('callJS', function() {
// a factory returns one value
return function(fnName) {
var args = [].slice.call(arguments, 1),
fn = window.fnName;
return fn.apply(fn, args);
};
});
Тогда все, что вам нужно сделать, чтобы воспользоваться услугой является внедрить его и сделать его доступным на $scope
объекта.
function LoginController($scope, callJS) {
$scope.callJS = callJS;
$scope.user = {
firstName: "Foo"
};
}
Принимая этот подход означает, что вы не будете ограничены только нажать события либо, пока callJS
находится в локальной области видимости, любое Угловое выражение будет иметь возможность вызывать функции JavaScript.
Это более гибкий, более проверяемый и более легкий отладчик, чем шаблоны переменных в атрибутах href
.