2013-10-01 3 views
0

Мой основной код до сих пор:Доступ другой контроллер в Angular.js

function UsersCtrl($scope) { 
    $scope.users = [ 
     { 
      "id": 1, 
      "usersName": "Matt Dance", 
      "favorites": { 
       "id":1, 
       "lodge_id":1 
      } 
     }, 
     { 
      "id":2, 
      "usersName": "Jennifer Dance", 
      "favorites": { 
       "id":1, 
       "lodge_id":2 
      } 
     } 
    ]; 
}; 

function LodgesCtrl($scope) { 
    $scope.lodges = [ 
     { 
      id: 1, 
      lodgesName: 'Matt\'s Awesome Lodge', 
      lodgeOwnersName: 'Matthew D', 
      lodgeStreetAddress: '5555 J lane', 
      lodgeCity: 'Salt Lake city', 
      lodgeZip: '11111', 
      lodgeState: 'Utah' 
     }, 
     { 
      id: 2, 
      lodgesName: 'Some Historic Lodge', 
      lodgeOwnersName: 'Santa Claus', 
      lodgeStreetAddress: '1 Clearwater Road', 
      lodgeCity: 'Grand Marais', 
      lodgeZip: '55555', 
      lodgeState: 'Minnesota' 
     }, 
     { 
      id: 3, 
      lodgesName: 'Yellowstone Lodge', 
      lodgeOwnersName: 'The Feds', 
      lodgeStreetAddress: '1 Yellowstone Way', 
      lodgeCity: 'Yellowstone', 
      lodgeZip: '55555', 
      lodgeState: 'Wyoming' 
     }, 
     { 
      id: 4, 
      lodgesName: 'Cool Lodge', 
      lodgeOwnersName: 'Awesome Guy', 
      lodgeStreetAddress: '1 awesome Road', 
      lodgeCity: 'Eagle Mountain', 
      lodgeZip: '55555', 
      lodgeState: 'Utah' 
     }, 
     { 
      id: 5, 
      lodgesName: 'The last lodge', 
      lodgeOwnersName: 'Adam V', 
      lodgeStreetAddress: '444 Last Road', 
      lodgeCity: 'San Francisco', 
      lodgeZip: '55555', 
      lodgeState: 'California' 
     } 
    ]; 
}; 

Я хочу, чтобы пользователь мог видеть название ложи ложи они Избраное. Например, пользователь предпочитает домик с идентификатором 1. Как тогда я могу прокрутить каждого пользователя и отобразить заголовок домика, который понравился? В принципе, мне нужно использовать lodge_id для каждого пользователя в своих избранных, чтобы отобразить имя ложа.

Мой HTML является до сих пор:

<div ng-controller="UsersCtrl"> 
<ul class="unstyled"> 
    <li ng-repeat="user in users"> 
    {{user.usersName}}<br> 
    </li> 
</ul> 
</div> 

Я новичок в угловому (и рамки JS в целом), и я не уверен, как идти об этом. Я изучил другие структуры, такие как Ember, но не смог решить это «простым» способом.

ответ

1

Простейшим решением является создание объекта сопоставления и привязка его к $ rootScope. Например:

$rootScope.mapping = { 
    userId: [lodge1, lodge2...] 
} 
+0

Это по существу отображает идентификатор пользователя с несколькими Лодж идентификаторами ... правильно? – mdance

+0

@mdance Точно :) – geniuscarrier

0

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

Здесь вы также можете увидеть рабочий плунжер (http://plnkr.co/edit/DtBxzYulJGTQC0KJsh8M?p=preview).

<!doctype html> 
<html lang="en" ng-app="myApp"> 
    <head> 
<meta charset="UTF-8"> 
<title>Document</title> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script> 

<script> 

var myApp = angular.module('myApp', []); 

myApp.controller('UsersCtrl', ['$scope', function ($scope) { 
    $scope.users = [ 
     { 
      "id": 1, 
      "usersName": "Matt Dance", 
      "favorites": { 
       "id":1, 
       "lodge_id":1 
      } 
     }, 
     { 
      "id":2, 
      "usersName": "Jennifer Dance", 
      "favorites": { 
       "id":1, 
       "lodge_id":2 
      } 
     } 
    ]; 

    $scope.lodges = [ 
     { 
      id: 1, 
      lodgesName: 'Matt\'s Awesome Lodge', 
      lodgeOwnersName: 'Matthew D', 
      lodgeStreetAddress: '5555 J lane', 
      lodgeCity: 'Salt Lake city', 
      lodgeZip: '11111', 
      lodgeState: 'Utah' 
     }, 
     { 
      id: 2, 
      lodgesName: 'Some Historic Lodge', 
      lodgeOwnersName: 'Santa Claus', 
      lodgeStreetAddress: '1 Clearwater Road', 
      lodgeCity: 'Grand Marais', 
      lodgeZip: '55555', 
      lodgeState: 'Minnesota' 
     }, 
     { 
      id: 3, 
      lodgesName: 'Yellowstone Lodge', 
      lodgeOwnersName: 'The Feds', 
      lodgeStreetAddress: '1 Yellowstone Way', 
      lodgeCity: 'Yellowstone', 
      lodgeZip: '55555', 
      lodgeState: 'Wyoming' 
     }, 
     { 
      id: 4, 
      lodgesName: 'Cool Lodge', 
      lodgeOwnersName: 'Awesome Guy', 
      lodgeStreetAddress: '1 awesome Road', 
      lodgeCity: 'Eagle Mountain', 
      lodgeZip: '55555', 
      lodgeState: 'Utah' 
     }, 
     { 
      id: 5, 
      lodgesName: 'The last lodge', 
      lodgeOwnersName: 'Adam V', 
      lodgeStreetAddress: '444 Last Road', 
      lodgeCity: 'San Francisco', 
      lodgeZip: '55555', 
      lodgeState: 'California' 
     } 
    ]; 
    }]); 


    </script> 

    </head> 
    <body> 

<div ng-controller="UsersCtrl"> 
<ul> 
    <li ng-repeat="user in users"> 
    {{user.usersName}}<br> 
    {{user.favorites.lodge_id}}<br> 
     <p ng-repeat="lodge in lodges | filter: { id: user.favorites.lodge_id }"> 
      {{lodge.lodgesName}} 
     </p> 
    </li> 
</ul> 
</div> 

</body> 
</html> 
+0

Я верю, что mdance спрашивает, как два контроллера разговаривают друг с другом. В вашем решении есть только один контроллер. – geniuscarrier

0

Вам следует воспользоваться услугой. Поскольку сервисы - это синглтоны, они являются самым простым способом обмена контентом между контроллерами. На самом деле, это угловой путь:

Не используйте контроллеры для:

Совместного использования без гражданства или с учетом состояния коды между контроллерами - Используйте угловые услуг вместо этого.

Developer Guide/Understanding the Controller Component

+0

Обратите внимание, что в тексте, который вы указали, говорится о совместном использовании «кода», а не об обмене данными. На самом деле в FAQ AngularJS говорится следующее: «И наоборот, не создавайте службу, единственной целью которой является сохранение и возврат бит данных». В FAQ часто говорится, что $ rootScope может и, вероятно, должен использоваться для этого. Я не уверен, что полностью согласен с их рекомендациями, и другие также высказывали сомнения по этому поводу. –

+0

Итак, что считается лучшей практикой? В конечном счете, я использую данные, а не код. Пока неясно, как это сделать. – mdance

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