Как предварительно установить флажок в angularJs с ng-checked

Кажется, я не могу заставить это работать. Поэтому у меня есть куча жанров фильмов, которые я хочу, чтобы их проверяли, являются ли эти жанры в пользовательской базе данных. Это мой код


%section(ng-controller="UserCtrl" ng-init="user_genres=#{preferred_genres}")
    %ul
         %li(ng:repeat="genre in preferred_genres")
            %input(type = "checkbox" ng:model="preferred_genres[genre]" id="genre-{{$index + 1}}" ng-checked="user_genres['{{genre}}']")
            %label{:for => "genre-{{$index + 1}}"} {{genre}}

И это #{preferred_genres} из haml


{"Action & Adventure":true,"Animation":true,"Art House & International":true,"Classics":true,"Comedy":true,"Documentary":true,"Drama":true,"Horror":true,"Kids & Family":true,"Musical & Performing Arts":true,"Mystery & Suspense":true,"Romance":true,"Science Fiction & Fantasy":true,"Special Interest":true,"Sports & Fitness":true,"Television":true,"Western":true}

Таким образом, каждый флажок должен быть проверен. Но при загрузке страницы флажок не установлен. Однако, если я hardcode ng-checked будет чем-то вроде этого, он работает.


ng-checked="user_genres['Western']"

Это действительно странно. Пожалуйста, помогите.

Ответ 1

Значение ng-checked должно быть выражением. Избавьтесь от {{}}. Итак, что-то вроде этого:

 %input(type = "checkbox" ng-model="preferred_genres[genre]" id="genre-{{$index + 1}}" ng-checked="user_genres[genre]")

Кроме того, вам необязательно иметь директиву ng-checked. Если значение вашей модели истинно, то оно будет проверено для вас.