2014-11-05 1 views
0

Когда я получаю данные JSON с сервера, я настраиваю страницу в зависимости от данных, которые я получаю от JSON. Проблема в том, что если страница сильно настраивается, мне понадобится инструкция if для каждого элемента, который нуждается в создании в HTML.Создание только элементов страницы Если присутствуют данные JSON

Вопрос в том, есть ли другой способ, кроме проверки каждой переменной в AngularJS? Пример JSON данные:

{ 
    user_logged_in: 'yes', 
    user_custom_background: 'no', 
    user_likes_page: 'yes' 
} 

В AngularJS я нужен if заявление проверки каждой переменной JSON, чтобы решить, должен ли я показывать что-то на странице или нет, так что число if с может стать экспоненциальным.

Редактировать экспоненциальной Я имею в виду, что страница имеет много элементов, которые будут созданы в зависимости от пользовательских данных из базы данных, извлекаемых в формате JSON, каждый из требующих своего собственного if заявление.

Rending логика была бы псевдо-код:

if user_logged_in: 'yes' then show black `div` 
if user_custom_background: 'yes' then change background color 
if user_likes_page: 'yes' then display message 

Количество МСФ будет ОГРОМНЫЙ для комплексного веб-приложения.

+0

Можете ли вы показать нам свою визуализацию? Это не кажется мне показательным, просто линейным. – Halcyon

+0

Не ответ, но вам будет проще хранить эти значения как boolean (true/false) вместо строк. Тогда вы можете сделать 'if (user_logged_in)' и т. Д. – Luke

+0

@ Doctus да, что я представил, что-то вроде псевдокода. – user3704920

ответ

0

Учитывая, что вы используете AngularJS, вы должны быть в состоянии присвоить JSON данные с сервера в области видимости переменных в контроллере следующим образом:

$http({ 
    method: 'GET', 
    url: '/server/data', 
}).success(function(response) { 
    $scope.serverResponse = response; 
}); 

Для целей тестирования, я бы пропустить вызов асинхронной и просто использовать объект в вашем вопросе, чтобы установить serverResponse (Обратите внимание, что я следовал за предложение от @Doctus использовать булевы.):

$scope.serverResponse = { 
    user_logged_in: true, 
    user_custom_background: false, 
    user_likes_page: true 
}; 

остальное будет включать HTML разметку изменения. На основе коды псевда, я полагаю, следующие изменения должны быть сделано:

<div id="black" ng-show="serverResponse.user_logged_in">Logged In</div> 
<div id="background" ng-style="{'background-color': (serverResponse.user_custom_background ? '#FF0000' : '#00FF00')}">&nbsp;</div> 
<div id="message" ng-show="serverResponse.user_likes_page">Message</div> 

Вот JSFiddle, которые показывают это в действии: http://jsfiddle.net/sy0q263n/

Надеются, что это помогает!

+0

Благодарим вас за ответ. Хотя это упрощает использование ng-if, я уверен, что внутри есть такое же количество операторов if, которые проверяют наличие переменных или нет, чего я хотел избежать, используя так много условностей. Я думаю, нет другого способа сделать это, кроме проверки для каждой переменной. – user3704920

+0

@ user3704920 Если эти переменные логически связаны, вы могли бы связать их как входные данные в конечный автомат, а конечный автомат установил атрибуты для ваших элементов. Скажем, вы связываете бит-флаг с каждым свойством и XOR их всех, вы получите число, которое отображается в состояние. user_logged_in (1), user_custom_background (2) и user_likes_page (4), установленное в true false true, сгенерирует 5, которые ваш код знает как отображающий черный div и отображаемое сообщение. Единственный 'if' здесь будет в вашем объявлении switch, если вы не будете считать внутренние селектора jQuery. – Jerome

Смежные вопросы