Я пытаюсь узнать о расширениях 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>
Обратный вызов 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.
console.debug($scope.tree);
печатать массив: это не так, потому что вы перезаписываете$scope.tree
новым массивом. Как выглядит ваш шаблон (тот, который использует ваш контроллер).