Я читал похожие вопросы/ответы на SO, но не могу решить свою проблему. Вот настройка: index.html
<li ng-repeat="a in article">
<a ng-click="articleDetails(a.id)">
{{a.title_en}}
</a>
</li>
js файл
angular.module('myApp.article', ['ngRoute'])
.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider.when('/article/:id', {
templateUrl: 'article/article.html',
controller: 'ArticleDetailCtrl'
});
//$locationProvider.html5Mode(true);
}])
.controller('ArticleDetailCtrl', ['$http', '$routeParams', '$scope', '$window', '$location',
function ($http, $routeParams, $scope, $window, $location) {
$scope.params = 'blabla';
}])
article.html
<div>{{params}}</div>
Вопрос: Когда я нажимаю ссылку в index.html, новая вкладка открывается, как ожидалось, с правильным URL-адресом, однако, вместо деталей статьи, которые я получаю Не найден на веб-странице. Что может быть проблемой?
EDIT 1: Функция articleDetail определяется следующим образом в другом контроллере, который используется в index.html:
$scope.articleDetails = function (id) {
$scope.id = id;
$scope.window = $window.open('article/' + id, '_blank');
}
Вы не можете сохранить область своего углового приложения в другом окне. Следовательно, вызов $window.open
откроет новое окно, которое не имеет вашей исходной $scope
.
Область привязки привязана только к окну, в котором инициализируется ngApp
.
Чтобы преодолеть это, вы можете использовать LocalStorage
вашего браузера.
EDIT: Пожалуйста, обратитесь к этому
$location.path
вместо$window