2015-01-24 2 views
0

Я использую angular.js $ scope. $ On для прослушивания событий из моей службы (событие получило срабатывание при изменении служебных данных).

Я использую следующий фрагмент кода:

$scope.people = contacts.people; 
$scope.$on('contacts-changed',() => { 
    $scope.people = contacts.people; 
}); 

Есть ли способ продлить Угловое, чтобы избежать первой строки и триггер $ объем $ на («контакты-измененные») или аналогичное по умолчанию на. время связывания события? Я искал в angular.js декораторы, но не уверен, как я могу украсить $ scope, чтобы добавить $ scope. $ Bind или аналогичный метод

Идеи?

+0

на самом деле это может быть решено с помощью какого-то грязного хака с глобальными $ функция привязки $ Bind ($ рамки, «событие-имя ', обработчик) или с $ bind, расположенным в $ rootScope, но я ищу более угловое-fr iendly. – let4be

ответ

0

Иногда решение настолько простое, но вам нужно думать вне коробки. Переместите блок обратного вызова события в функцию и просто запустите его, когда контроллер загрузится после привязки события.

Смотреть это:

function handlePeople() { 
    $scope.people = contacts.people; 
} 
$scope.$on('contacts-changed', handlePeople); 
handlePeople(); 

Вы также можете сохранить исходный код и сделать триггер вручную.

+0

Не понял ли я вопрос? – Shomz

+0

Мне нужна удобная обертка ($ scope. $ Bind), чтобы уменьшить раздувание кода и упростить вещи, поскольку у меня много таких вызовов, и я не хочу объявлять функции для таких простых вещей. В основном мне просто нужно поместить $ scope. $ Bind в каждой $ scope (а не в $ rootScope), которая будет действовать точно так же, как $ scope. $ On, но будет самонастраиваема в первый раз. – let4be

+0

Объявление функций для таких вещей (просто или нет) Рекомендуемый способ сделать это: https://github.com/johnpapa/angularjs-styleguide#named-vs-anonymous-functions Если вы не хотите делать это, как что, похоже, вы ответили на свой вопрос, верно? – Shomz

0

мирским пошел следующий раствор:

$rootScope.$bind = (bindName, bindHandler) => { 
    $rootScope.$on(bindName, bindHandler); 
    bindHandler(); 
}; 

Но я хочу, чтобы заменить его, так что я мог бы использовать $ рамки вместо $ rootScope и без определения этого в каждых $ рамки ... я мог попробуйте использовать $ scope._ прото _ но кажется _ прото _ осуждается

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