2014-12-01 3 views
1

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

<div> 
    <div ng-include="'/navigation.html'"></div> 
    <div> 
     <!-- Page wrapper --> 
     <div ng-include="'/topnavbar.html'"></div> 
     <!-- Main view --> 
     <div ui-view></div> 
     <!-- Footer --> 
     <div ng-include="'/footer.html'"></div> 
    </div> 
</div> 

В навигационной панели я нг-повторить:

<ul ng-controller="NavigationCtrl" class="nav nav-second-level"> 
    <li ng-repeat="user in users" ui-sref-active="active"> 
     <a ui-sref="account">{{user.name}}</a> 
    </li> 
</ul> 

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

ответ

2

Ну, я вижу два пути здесь:

1) Прослушивание государственных событий, и сделать обратный вызов пользовательских данных обновления. Docs здесь: https://github.com/angular-ui/ui-router/wiki#state-change-events

2) Я предполагаю, что пользователи массива происходит от службы, что-то вроде:

... 
$http.get('/users', function(data){ 
    return data; 
}); 
... 

так, вместо этого, вы можете хранить массив локально в обслуживании (что синглтон), и обновите его из любых мест, так что у вас будет ссылка на массив в «NavigationCtrl», и там также будут обновлены данные.

Что я имею в виду:

function UserService($http) { 
    var users = []; //inital array 
    var updateUsers = function() { 
    //get to update users here 
    }; 
    var getUsers = fucntion() { 
    return users; 
    } 

    return { 
    updateUsers : updateUsers, //this method will be called when you need to update user list 
    getUsers : getUsers //this method will be called in NavigationCtrl 
    } 
} 

Update:

Вот что я имел в виду pt.2 http://plnkr.co/edit/U2XwXNEqAxRrEa0VpYAu?p=preview

+0

Спасибо! Я предпочитаю второй способ, и я действительно сделал это, но вот вопрос, если я обновляю данные в службе, тогда как я могу вызвать функцию NavigationCtrl getUsers и обновить данные шаблона навигации? – Yelnar

+0

Дело в том, что вам не нужно это делать, потому что вы передаете массив «по ссылке» в методе getUsers. но чтобы он работал так, как ожидалось, вы не должны переписывать массив пользователей в методе «updateUsers», но обновляете его внутри. Вот пример: http://plnkr.co/edit/U2XwXNEqAxRrEa0VpYAu?p=preview – Rasalom

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