Я пытаюсь передать строку в функцию, которая находится в моем файле javascript
Переменная {{data.title}} доступна в другом месте в моем html файле, но кажется, что мне что-то не хватает, потому что функция не получает переменную как '
<a class="item item-icon-left" ng-click="favorites('{{data.title}}')">
<i class="icon ion-ios-star-outline"></i>
<span>Add to favorites</span>
</a>
Файл JS:
$scope.favorites = function (x) {
console.log(x);
// retrieve it (Or create a blank array if there isn't any info saved yet),
var favorites = JSON.parse(localStorage.getItem('favoritesInfo')) || [];;
// add to it,
favorites.push({ name: x});
// then put it back.
localStorage.setItem('favoritesInfo', JSON.stringify(favorites));
console.log(localStorage.getItem('favoritesInfo'));
}
Директива ng-click
ожидает выражения. Вы прошли в строке с тем, что вы считали интерполяцией.
Вы можете использовать интерполяцию ({{ the return value of an expression/variable }}
) в шаблонах, а не в выражениях.
Поэтому правильная вещь - ng-click="favorites(data.title)"
.
Использование выражений в HTML-шаблонах
Как правило, при выполнении выражений внутри HTML-шаблона в AngularJS вы можете получить доступ к переменным области видимости, как обычно, без префикса $scope
.
Поэтому, если в вашем контроллере есть что-то вроде этого:
$scope.title= 'News From Today';
Вы можете привязать к нему (выражения, правильно?) Так:
<h1 ng-bind="title"></h1>
Или с помощью интерполяции:
<h1>{{ title }}</h1>
Кажется, что проблема с ngClick
:
ng-click="favorites('{{data.title}}')"
Как бы то ни было, вы помещаете интерполированное выражение ({{<exp>}}
) в строку: '{{data.title}}'
, но попробуйте просто передать его так, так как inteprolation требуется только при отображении значения прямо к виду:
ng-click="favorites(data.title)"
favorites(data.title)
. Не уверен, решит ли это вашу проблему, но это примечание для хорошей практики. Если это помогло, дайте мне знать, и я установлю это как ответ.