Angular:从<script>标记内访问范围

时间:2016-02-03 20:16:37

标签: javascript angularjs angularjs-scope

我有一个从我的API填充的范围变量。我可以使用{{}}大括号从HTML访问此内容。

&#xA;&#xA;

我需要将范围传递到脚本文件中。

&#xA;&# xA;
 &lt; script type =“text / javascript”&gt; var data = {{data}}&lt; / script&gt;&#xA;  
&#xA;&#xA;

从目前为止我看到的东西看起来过于复杂相对简单。

&#xA;&#xA;

建议的方法是什么?这不是一个常见的问题吗?

&#xA;&#xA;

具体来说,我试图使用一个javascript图形库Cytoscape.js。该图表是从javascript对象填充的。我想从范围填充这个javascript对象。我发现了这个:

&#xA;&#xA;

Pass Angular范围变量为Javascript

&#xA;&#xA;

我想知道这是否通常以角度处理,因为它看起来像是黑客。

& #xA;

1 个答案:

答案 0 :(得分:2)

首先要明确的是,Angular不会在脚本标记内执行插值。

https://docs.angularjs.org/guide/interpolation

有一些方法围绕这个...直接调用变量的值可以是其中一种方式:

<body ng-app="myApp">
    <div ng-controller="myController" id="yourControllerElementID">

    </div>
</body>

<script type="text/javascript">
    var app = angular.module("myApp", []);

    app.controller("myController", myController);

    function myController($scope){
        $scope.data = 'some value';
    }

    // Capturing value from outside the controller
    setTimeout(function(){
        var data = angular.element(document.getElementById('yourControllerElementID')).scope().data;
    }, 1000);
</script>

否则,根据需要使用插值,将使用控制器的值创建隐藏输入,并使用vanilla javascript或jquery捕获此值:

<body ng-app="myApp">
    <div ng-controller="myController">
        <input type="hidden" id="myValueFromController" value="{{data}}" />
    </div>
</body>

<script type="text/javascript">
    var app = angular.module("myApp", []);

    app.controller("myController", myController);

    function myController($scope){
        $scope.data = 'some value';
    }

    // Capturing value from outside the controller
    setTimeout(function(){
        var data = document.getElementById("myValueFromController").value;  // or
        var data = $("#myValueFromController").val();
    }, 1000); 
</script>

无论如何,让我们说它不会是 Angular Way ,但由于我不知道它的发展范围,这是我能告诉你的最好的。