Получить закладки из области видимости Chrome

0

Я пытаюсь узнать о расширениях Chrome и испытываю определенные проблемы. Я пытаюсь получить список моих закладок, используя chrome.bookmarks api, но у меня возникают проблемы с получением фактических значений, где я могу ими манипулировать.

У меня есть этот простой угловой модуль:

angular.module('bookmarkapp', [])
  .controller('mainctrl', function($scope) {


    $scope.tree = [];
    dumpBookmarks();
    console.debug($scope.tree);

    function dumpBookmarks() {
      $scope.bookmarkTreeNodes = chrome.bookmarks.getTree(
        function(bookmarkTreeNodes) {
          console.debug(bookmarkTreeNodes)
          $scope.tree = bookmarkTreeNodes;
        });
    }

  });

И я хочу, чтобы объект древовидной структуры был $scope.tree переменную $scope.tree. Когда я делаю console.debug(bookmarkTreeNodes) я получаю значения закладок, но когда я пытаюсь установить его равным $scope.tree и распечатать, я не могу. Я не такой уж новый для js и угловатый, но я серьезно не знаю, почему это не сработает.

EDIT - это структура bookmarkTreeNodes

Array [3]
    Array[0] 
        children : Array[17]
        title : "bookmarks bar"
    Array[1]
        children : Array[0]
        title : "Other bookmarks"
    Array[2]
        children : Array[1]
        title : "Mobile Bookmarks"

Вот html с помощью контроллера:

<body ng-app="bookmarkapp" ng-controller="mainctrl">
  <div class="row">
    <div class="col s12">
      <div class="card grey darken-1">
        <div class="card-content white-text">
          <span class="card-title">Card Title</span>
          <h4 data-ng-repeat="item in bookmarks">{{item.title}}</h4>
        </div>
      </div>
    </div>
  </div>
  <script src="script.js"></script>
</body>
Теги:
google-chrome-extension

1 ответ

0
Лучший ответ

Обратный вызов chrome.bookmarks.getTree вызывается вне цикла дайджеста Angular.js. Вы должны вызвать $scope.$apply чтобы применить изменения. А поскольку метод .getTree ничего не возвращает, удалите $scope.bookmarkTreeNodes = chrome.bookmarks.getTree(...); назначение.

Это должно работать так, как ожидалось:

function dumpBookmarks() {
  chrome.bookmarks.getTree(function(bookmarkTreeNodes) {
    $scope.$apply(function() {
      $scope.tree = bookmarkTreeNodes;
    });
  });
}

Также ознакомьтесь с инструкциями Understanding Angulars $ apply() и $ digest() на сайте Sitepoint.

  • 0
    Я думаю, что это может быть близко, но он просто возвращает пустой массив.
  • 0
    @erp Откуда вы знаете, что «он возвращает пустой массив»? Если вы ожидаете console.debug($scope.tree); печатать массив: это не так, потому что вы перезаписываете $scope.tree новым массивом. Как выглядит ваш шаблон (тот, который использует ваш контроллер).
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню