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...
    };
Другие вопросы по тегам