Javascript 从AngularJS访问全局变量

Javascript 从AngularJS访问全局变量,javascript,json,angularjs,Javascript,Json,Angularjs,我想用嵌入HTML页面中的JSON对象初始化一个角度模型。例如: <html> <body> <script type="text/javascript" charset="utf-8"> var tags = [{"name": "some json"}]; </script> <ul> <li n

我想用嵌入HTML页面中的JSON对象初始化一个角度模型。例如:

<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>
但它不起作用

只有将
标记列表
直接包含到HTML页面中,并将JSON直接呈现到该函数中,它才能工作


如何访问角度控制器中单独js文件中的
标记
字段?

至少有两种方法:

  • 在独立脚本标记中声明
    标记
    数组,在这种情况下,
    标记
    变量将绑定到窗口对象。将$window注入控制器以访问窗口绑定变量
  • ng init
    指令中声明
    标记
    数组
  • 显示两种解决方案:

    HTML:


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

    是否有其他方法可以在视图中初始化变量,而不必在HTML标记中声明它?例如,如果上面在
    nginit
    中声明的
    tags
    数组是一个非常大的数组,我想在视图中初始化它(例如从服务器端代码),我可以使用类似
    {{tags=[{…}}}}
    的东西吗?@Stewie第二种方法也存在问题。如果标签是通过jsonify方法生成的,并且如果它们包含引号,那么brakeI看不到比在@GFoley83的用例中使用$window更好的方法;我也有同样的问题,我发送了一个初始的JSON负载,其中包含我想要注入到控制器中的标记,但是这对于Angular来说非常困难。我也不喜欢污染窗口对象(或者必须拉入全局对象),但这似乎是最好的方法。@ElYobo是的,这非常困难,还没有干净的解决方法。我想我更喜欢使用
    之类的东西,而不是必须传递全局变量。
    function TagList($scope, $rootScope) {
      $scope.tags = $rootScope.tags;
    }
    
    <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>
    
    app.controller('AppController',
      [
        '$scope',
        '$window',
        function($scope, $window) {
          $scope.tags = $window.tags;
        }
      ]
    );