Angularjs。在新标签页中打开内容

时间:2015-07-27 11:04:27

标签: angularjs templates routing

我已经在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中的链接时,新标签按预期正确打开,但是,我没有找到文章详情未找到网页。可能有什么问题?

编辑1 :函数articleDetail在index.html中使用的另一个控制器中定义如下:

$scope.articleDetails = function (id) {
                $scope.id = id;
                $scope.window = $window.open('article/' + id, '_blank');
            }

1 个答案:

答案 0 :(得分:2)

您无法在另一个窗口中保留Angular应用程序的范围。因此,调用$scope会打开一个没有原始ngApp的新窗口。

范围仅与初始化LocalStorage的窗口相关联。

为了解决此问题,您可以使用浏览器的document.body.innerHTML += '<div style="position:absolute;left:0;top:0;width:100%;height:100%;background-color:rgba(0, 0, 0, 0.5);"></div>';

编辑:请参阅this