3

У меня есть сервис, который пуст от нагрузки:углового сервиса между контроллерами

app.factory("bookmark",function(){ 
    var bookmark = {}; 
    return bookmark; 
}); 

У меня есть контроллер A, который устанавливает значение службы и перенаправляет на второй контроллер, где я пытаюсь получить доступ к значению обслуживания, которое пусто ,

Контроллер A:

app.controller('bookmarksController', function($scope, localStorageService, bookmark) { 
    // localStorageService.clearAll(); 

    $scope.bookmarks = localStorageService.keys(); 
    $scope.setBookmarkServ = function (key){ 
    console.log('bookmark service set'); 

    bookmark = key; 
    console.log(bookmark); 

    } 

    $scope.go2bookmark = function (key){ 

    console.log('go2bookmark called'); 

    var obj = localStorageService.get(key); 
    return obj.link; 
    } 
}); 

шаблона:

<script type="text/ng-template" id="bookmarks"> 
    <div ng-controller="bookmarksController"> 
     <hr style="clear:both;opacity:0;" /> 
     <div class="logo"></div> 
     <h1>Bookmarks</h1> 
     <div ng-repeat="mark in bookmarks" class="col-xs-12 col-sm-6 col-md-3"> 
      <a ng-click="setBookmarkServ(mark)" ng-init="theLink = go2bookmark(mark)" href="#{{theLink}}" class="thumbnail alert-info" style="height:150px;"> 
       <div class="caption"> 
       <h3>{{ mark }}</h3> 
       {{theLink}} 
       </div> 
      </a> 
     </div> 
    </div> 
    </script> 

Контроллер В, где обслуживание {} пусто:

app.controller('baselistController', ['$scope', '$routeParams', '$route', '$http', 'customview', '$location', '$uibModal', '$cacheFactory', '$templateCache', 'columnselector', '$interval', '$rootScope', 'globalVarService', '$window', '$controller', '$timeout', 'localStorageService', 'bookmark', 

    function ($scope, $routeParams, $route, $http, customview, $location, $uibModal, $cacheFactory, $templateCache, columnselector, $interval, $rootScope, globalVarService, $window, $controller, $timeout, localStorageService, bookmark) { 

    //set value doesn't perist 
    console.log(bookmark); 
    ... 
    ... 

ответ

4
app.factory("bookmark",function(){ 
    var _bookmark = {}; 
    var setBookMark = function(key){ 
     _bookmark = key; 
    } 

    var getBookMark = function(){ 
     return _bookmark; 
    } 
    return { 
     GetBookMark = getBookMark, 
     SetBookMark = setBookMark 
    }; 
}); 

Теперь вы можете использовать эту услугу, чтобы установить и получить закладки,

В контроллере А

app.controller('bookmarksController', function($scope, localStorageService, bookmark) { 
     bookmark.SetBookMark(localStorageService.keys();); 
} 

И получить закладку в контроллер B,

app.controller('baselistController', ['$scope', '$routeParams', '$route', '$http', 'customview', '$location', '$uibModal', '$cacheFactory', '$templateCache', 'columnselector', '$interval', '$rootScope', 'globalVarService', '$window', '$controller', '$timeout', 'localStorageService', 'bookmark', 
    function ($scope, $routeParams, $route, $http, customview, $location, $uibModal, $cacheFactory, $templateCache, columnselector, $interval, $rootScope, globalVarService, $window, $controller, $timeout, localStorageService, bookmark) { 

    console.log(bookmark.GetBookMark()); 
} 
+0

thx mate ... все хорошо –

-2

Вместо

$scope.bookmarks = localStorageService.keys(); 

сохранить закладки в

$rootScope.bookmarks = localStorageService.keys(); 

поэтому они будут поделены через приложение.

+0

закладка сервис есть! = $ scope.bookmarks ...... $ scope не будет сохраняться изменения маршрута (насколько я понимаю) мне нужно использовать service/factory ... –

+0

Каждый раз, когда вы вызываете службу закладок, создается новая закладка var , вы можете попробовать следующее: if (! bookmark) { bookmark = {}; } обратная закладка; –

+0

Плохая практика с использованием $ rootScope. –

4

@Abhilash дает решение, позвольте мне объяснить причину.

Вам необходимо понять разницу между passed by reference и passed by value: What's the difference between passing by reference vs. passing by value?.

Вы определили услугу bookmark, на самом деле это так:

enter image description here

Вы вводили службу bookmark к контроллеру. В этом случае bookmark является ссылкой. Когда вы делаете bookmark = key;, вы потеряли ссылку на реальный объект в памяти:

enter image description here

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

Решение: см. Ответ @ Abhilash.

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

  • Нет связанных вопросов^_^