AngularJS, czy istnieje możliwość zmiany wartosci modelu w kontrolerze z innego?

0

Witam.

Orientuje się ktoś, czy dopuszczalna jest w AngularJS zmiana wartości modelu w kontrolerze z innego kontrolera? Przykład:

<div ng-controller="MainController">

     <div ng-controller="FirstCtrl">
          {{message}}
     </div>

     <div ng-controller="SecondCtrl">
          <button ng-click="changeMessage()"/>
     </div>

</div>

Czy są jakieś sposoby aby zmienić wartość "message" używając kontrolera "SecondCtrl"?

0

Da się, pytanie w jakim celu?

Jedno z podejść polega na zdefiniowaniu obiektu na kontrolerze będącym parentem, czyli MainCtrl, który zawiera message, a nie bindowanie bezpośrednio do prymitywa. W Angularze dyrektywa ng-controller dziedziczy po parencie, a nie współdzieli scope, w związku z czym przypisanie do samego prymitywu w SecondCtrl spowodowałoby stworzenie nowego elementu na scope-ie, a nie update istniejącego w parencie.

app.controller('MainCtrl', function($scope) {
  $scope.message = {content: "text"};
});
app.controller('SecondCtrl', function($scope) {
  $scope.changeMessage = function() {
    $scope.message.content = "text2";
  });
});

Drugie z podejść to broadcastowanie eventu w SecondCtrl z poziomu $rootScope i obsłużenie go (za pomocą $on) w FirstCtrl.
Trzecie podejście to stworzenie serwisu, który przechowuje informacje o message:

app.value('Message', {content: 'text'})
app.controller('FirstCtrl', function($scope, Message) {
  $scope.message = Message;
});
app.controller('SecondCtrl', function($scope, Message) {
  $scope.changeMessage = function() {
    Message.content = "text2";
  });
});
<div ng-controller="FirstCtrl">
  {{message.content}}
</div>

1 użytkowników online, w tym zalogowanych: 0, gości: 1