Подтвердить что ты не робот

Обмен переменной между контроллерами в angular.js

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

В Main.js:

function MainCntl($scope) {
  ---code
}

function SearchCtrl($scope, $http) {
    $scope.url = 'http://10.0.0.13:9000/processAdHoc';
    $scope.errorM = "No results";     
    $scope.search = function() {

        $http.post($scope.url, { "data" : $scope.keywords}).
        success(function(data, status) {
            $scope.status = status;
            $scope.data = data;
            $scope.result = data; 
            alert('yes');
        })
        .
        error(function(data, status) {
            $scope.data = data || "Request failed";
            $scope.status = status;   
            alert('no');
            $scope.result = "failed";
        });
    };
}

В Index.html

<body ng-controller="MainCntl" >
---code
<div ng-controller="SearchCtrl">
     <form class="well form-search">
     <div class="ui-widget">
          <label for="tags"></label>
          <a ng-click="search()"><input type="image" src="../../images/search1.png" class="searchbox_submit" /></a>
          <input ng-model="keywords" placeholder="Shadow Search" id="tags" class="input-medium search-query rounded" /> 
     </div>
     </form>
</div>
---code
<p ng-model="result">
     {{result}}
</p>
</body>

Все хорошо работает с ajax. Я отправляю данные и получаю ответ, мой вопрос таков:

В функции SearchCtrl у меня есть переменная с именем $scope.result, которая позже упоминается в Index.html. Если я вставляю html-код, содержащий эту переменную в контроллер SearchCtrl, он отлично работает, но если он находится в контроллере MainCtrl, он не работает. Как я могу поделиться этой переменной между контроллерами.

Спасибо заранее

4b9b3361

Ответ 1

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

Пример:

angular.module("yourAppName", []).factory("myService", function(){

  return {sharedObject: {data: null } }

});

function MainCtrl($scope, myService) {
  $scope.myVar = myService.sharedObject;
}

function SearchCtrl($scope, $http, myService) {
  $scope.myVar = myService.sharedObject;
}

В вашем шаблоне выполните:

{{myVar.data}}

См. пример Использование Angular v1.1.5

Причина, по которой вы помещаете ее во внутренний объект, заключается в том, чтобы сохранить ваши ссылки, если вы сохраните их без "sharedObject" и измените этот объект, ваша привязка будет указывать на старую ссылку и ничего не будет показывать в шаблон.