Angular ngClick: работает только в некоторых случаях
Я пытаюсь переопределить <a>
ссылка с помощью ng-click, но она работает только тогда, когда я загрузил страницу, используя базовый URL.
Я понимаю, что это звучит странно, но вы можете увидеть последствия, сравнив http://afmnew.herokuapp.com/ с http://afmnew.herokuapp.com/criteria/price/1 и используя кнопки справа для применения фильтров., В последнем случае вы увидите, что карта мигает при перезагрузке, тогда как в первом случае она просто удаляет и добавляет маркеры.
Это ключевые части кода, заявленные с помощью HTML:
<div class="btn-group btn-group-justified price">
<a href="criteria/price/1" class="btn btn-default" ng-click="main.applyFilter($event)">Budget</a>
<a href="criteria/price/2" class="btn btn-default" ng-click="main.applyFilter($event)">Mid-range</a>
<a href="criteria/price/3" class="btn btn-default" ng-click="main.applyFilter($event)">Fine dining</a>
</div>
Это соответствующая функция в моем контроллере. Контроллер определенно загружается, когда я использую более длинный URL, поскольку этот контроллер обрабатывает URL, чтобы применить соответствующий фильтр. Я не знаю, с чего начать пытаться отследить проблему сейчас.
angular.module 'afmnewApp'
.controller 'MainCtrl', (Restos, $stateParams, $state, Dictionary) ->
this.reset = () ->
console.log "MainCtrl: reset"
this.data.offcanvas = false
Restos.reset()
apply = (q, v) ->
Restos.data.headTitle = "The Amsterdam Foodie's top "+Restos.data.pageTitle
Restos.data.metaDescription = "The Amsterdam Foodie's top "+Restos.data.pageTitle
if v == 'price'
Restos.data.pageTitle = Dictionary.prices[q-1].name + " "+ Dictionary.prices[q-1].suffix
Restos.priceFilter parseInt q
else
Restos.data.pageTitle = Dictionary.cuisines[q].name + Dictionary.cuisines[q].suffix
Restos.cuisineFilter q
this.applyFilter = (event) ->
console.log event.target.href
event.preventDefault()
params = event.target.href.match(/criteria\/(.*)\/(.*)$/)
console.log("MainCtrl: applyFilter: ", params) if Restos.debug
this.data.offcanvas = false
# $state.transitionTo 'criteria', {criteria:params[1], q:params[2]}, {inherit:false}
# stateObj =
# criteria: params[1]
# history.pushState({}, "null", "criteria/"+params[1]+"/"+params[2]);
apply params[2], params[1]
this.data = Restos.data # needed to pass click from navbar
# preparePage = () ->
console.log "MainCtrl: loading..."
# Restos.data.offcanvas = false
# This code causes the problem
if $stateParams.criteria
q = $stateParams.q
ga 'send', 'pageview', '/'+$stateParams.criteria+'/' + q
# Restos.data.intro = false
# console.log "mainCtrl: Criteria type %s, value %s", $stateParams.criteria, q if Restos.debug
apply $stateParams.q, $stateParams.criteria
else
ga 'send', 'pageview', '/'
Restos.data.pageTitle = "Restaurant recommendations"
Restos.data.headTitle = "Restaurant recommendations by the Amsterdam Foodie"
Restos.data.metaDescription = "The Amsterdam Foodie's top restaurant recommendations from among 400 reviews"
# default filter is applied anyway
1 ответ
Пытаться event
вместо $event
:
angular.module('afmnewApp').controller('MainCtrl', function() {
this.applyFilter = function(event) {
event.preventDefault();
// change model and thus view...
};