0

I am not that good in AngularJS so maybe this question is very simple to solve, but I couldn't find a solution yet and it's driving me crazy.

I had to update the AngularJS version in my project from 1.2.28 to 1.3.15 and an error started to show. Now my navbar is not working properly in a mobile mode.

The error is Error: [$parse:syntax] Syntax Error: Token '{' is an unexpected token at column 18 of the expression [expander.submenu_{{ $index }}.toggle()] starting at [{{ $index }}.toggle()].

How do I fix it?

The problematic file is:

ul.show-on-large(data-context-menubar)
    li(gp-aria-role="menuitem" role="menuitem")
        a.nav-primary-item(title='Home',ui-sref-opts="{location: false}",  ui-sref='subscription.location.home' ng-click="expander.collapse(); menu.cancel();") Home
    li(ng-repeat='folder in rootFolders track by folder.Id' ng-class="{'megamenu-hover': hover==folder.Id}" ng-mouseenter="menu.show(folder.Id)" ng-mouseleave="menu.cancel()")
        .nav-primary-item(ng-if="folder.hasChildren" gp-aria-role="menuitem" role="menuitem" aria-haspopup="true" aria-owns="submenu_{{ $index }}" ng-click="expander.submenu_{{ $index }}.toggle()")
            | {{ folder.Name }}
            i.icon-down-open
        a.nav-primary-item(ng-if="!folder.hasChildren" ui-sref-opts="{location: false}" ui-sref="subscription.location.folder({ type: 'folder', locationId: '{{ folder.Id }}' })" gp-aria-role="menuitem" role="menuitem")
            | {{ folder.Name }}
        .panel.megamenu(ng-if="folder.hasChildren" id="submenu_{{$index}}" gp-aria-role="menu" role="menu" ng-show="hover==folder.Id || expander.submenu_{{ $index }}.state")
            .step3.large_3.show-on-large(ng-if="folder.Featured.length > 0" ng-repeat='item in folder.Featured track by item.Id')
                a.panel.megamenu-featured(ui-sref-opts="{location: false}", title="Link to {{item.title}}" ui-sref="subscription.location.content({ type: '{{item.Type}}', locationId: '{{ item.Id }}' })" gp-aria-role="menuitem" role="menuitem" ng-click="expander.collapse(); menu.cancel();")
                    img(ng-src='{{ imageSrc(item.ImageId) }}', alt='Feature thumbnail' class="megamenu-thumb")
                    b.epsilon.uppercase.primary-color Featured Article
                    p {{ item.Name }}
            .large_3(ng-repeat='column in folder.Columns track by $index')
                ul.nav-megamenu-secondary(data-context-submenu)
                    li(ng-repeat='subFolder in column track by subFolder.Id')
                        a(gp-aria-role="menuitem" role="menuitem" ui-sref-opts="{location: false}", ui-sref="subscription.location.folder({ type: 'folder', locationId: '{{ subFolder.Id }}' })" ng-click="expander.collapse(); menu.cancel();")
                            | {{ subFolder.Name }}
4
  • Where $index is coming from? (You can't put {{$index}} in your ng-click method - it says: syntax error) Commented Sep 4, 2018 at 18:26
  • @IsraGab I didn't do this code, but as far as I know (maybe I'm wrong), this $index come from the ng-repeat Commented Sep 4, 2018 at 18:34
  • are you sure that code used to work ? Commented Sep 4, 2018 at 18:37
  • @IsraGab yes, I don't know how but it used to work. Commented Sep 4, 2018 at 19:12

1 Answer 1

1

In JavaScript, properties of an object can alternately be accessed using square brackets. Try this:

ng-click="expander['submenu_' + $index ].toggle()"
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.