从AngularJS访问全局变量

dea*_*mon 8 javascript json angularjs

我想用一个嵌入在HTML页面中的JSON对象初始化一个Angular模型.例:

<html>
  <body>
    <script type="text/javascript" charset="utf-8">
      var tags = [{"name": "some json"}];
    </script>
    <ul>
      <li ng-repeat="tag in tags">{{tag.name}}</li>
    </ul>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

tags字段无法解析,因为它在查找中$scope.我试图访问tags我的控制器中的字段,如下所示:

function TagList($scope, $rootScope) {
  $scope.tags = $rootScope.tags;
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

它只有在我TagList直接包含在HTML页面中并将json直接渲染到此函数中时才有效.

如何tags在Angular控制器中的单独js文件中访问该字段?

Ste*_*wie 11

至少有两种方式:

  1. tags在独立的脚本标记中声明您的数组,在这种情况下,您的tags变量将绑定到window对象.将$ window注入控制器以访问窗口绑定变量.
  2. tagsng-init指令中声明您的数组.

显示两种解决方案

HTML:

<body>

  <script type="text/javascript" charset="utf-8">
    var tags = [{"name": "some json"}];
  </script>

  <div ng-controller="AppController">
    tags: {{tags | json}}
    <ul>
      <li ng-repeat="tag in tags">{{tag.name}}</li>
    </ul>
  </div>  

  <div>
    <ul ng-init="tags = [{name: 'some json'}]">
      <li ng-repeat="tag in tags">{{tag.name}}</li>
    </ul>
  </div>

</body>
Run Code Online (Sandbox Code Playgroud)

JS:

app.controller('AppController',
  [
    '$scope',
    '$window',
    function($scope, $window) {
      $scope.tags = $window.tags;
    }
  ]
);
Run Code Online (Sandbox Code Playgroud)

Plnkr

我强烈建议不要污染窗口对象.