1

Я работаю с приложением, где у меня есть следующая строка в конце сервиса в service.js.

$rootScope.$broadcast('rootScope:Object') 

Здесь Object - это выход службы API. Если теперь я хочу использовать этот объект в моем фактическом файле app.js, как я могу его использовать? Что указывает указанная выше строка и как ее использовать на последующих страницах?

Любая помощь приветствуется.

EDIT:

Из приведенных ответов попытался следующие:

В сервисной странице:

this.getobject=function(){ 
//http api Function call with result as response.data = resp 
$rootScope.$broadcast('rootScope:resp',resp); 
} 

На странице ребенка Область применения:

resp=[]; 
$rootScope.$on('rootScope:resp',function(resp) { 
      $scope.resp=resp; 
      console.log(resp); 

     }); 
$scope.$on('rootScope:resp', function(e, params){ 
      console.log(params); // respobject 
     }); 

К сожалению, как Ждут» t распечатать что-нибудь на консоли. Любая проблема с подходом?

ответ

6

Эта строка означает, что $ rootScope (самый высокий уровень видимости) будет транслировать событие с именем «rootScope: Object» всем детям (области вашего приложения).

Согласно https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope, вы можете добавить параметры в функцию $broadcast(), чтобы в вашем случае передать свой объект. Вы будете иметь:

$rootScope.$broadcast('rootScope:Object', myObject) 

В вашем ребенке рамке, вы можете легко получить это с помощью:

$scope.$on('rootScope:Object', function(e, params){ 
    console.log(params); // myObject 
}); 

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

EDIT: Вот codepen, показывающий загрузку и отображение данных из API, используя $ широковещательного/$ на

+0

Как я уже сказал здесь, «myObject» - это массив, возвращенный из ответа api, могу ли я использовать его в области моего дочернего объекта и назначить его для какого-то другого массива? – user168983

+0

Да, вы можете. Я сделал небольшой код с простым отображением вызова и ответа api на основе $ broadcast/$ on: http://codepen.io/anon/pen/ENvjVY – JulCh

1

Не уверен, что я понял ваш вопрос, но broadcast ничего не делает больше, чем отправка событие вниз для всех дочерних областей.

Таким образом, в службе вы, вероятно, хотите иметь что-то вроде:

$rootScope.$broadcast('myEventNameHere', actualJavascriptObjectHere); 

А на том месте, которое вы хотите прослушать это событие, вы будете иметь что-то вроде этого:

$scope.$on('myEventNameHere', function(actualJavascriptObjectHere) { 
     console.log(actualJavascriptObjectHere); 
}); 

Надеюсь, что помогает.

+0

На самом деле, скорее всего, у вас будет '$ scope. $ on..' вместо '$ rootScope. $ on ...'. Кроме того, ваш объект будет вторым параметром вашего обратного вызова, первым будет объект события –

+0

Хорошая точка, @NexusDuck. Я отредактирую ответ. –

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