从Angular App范围之外调用AngularJS函数

Bru*_*ira 6 javascript angularjs

我已经看到了很多与此事有关的问题,但我尝试过的解决办法是:

在文件夹public中我有一个名为app.js的文件,我在这里定义我的AngularJS应用程序:

var app = angular.module('app', []);
var RectangleDim=30;

app.controller('MainCtrl', function($scope, $http) {
Run Code Online (Sandbox Code Playgroud)

在文件的最后,我做的引导如下:

angular.bootstrap(document.getElementById('body'), ["app"]);
Run Code Online (Sandbox Code Playgroud)

然后,在同一文件夹内和HTML内部,我对AngularJS应用程序的入口点是这样的:

 <div id="body">
<div ng-controller="MainCtrl">
    <div class="col-sm-6 col-md-6 col-lg-6" style="background-color: #D2D7D3">

        <div style="padding:25px;">
Run Code Online (Sandbox Code Playgroud)

然后,在另一个文件夹上,我有另一个JS文件,我需要调用AngularJS代码中定义的特定函数.该函数名为Draw(),当我单击AngularJS按钮时会触发它.

要简单地在另一个文件中调用该函数而不点击任何按钮我正在做这样的事情:

        var e = document.getElementById('body');
        var scope = angular.element(e).scope();
// update the model with a wrap in $apply(fn) which will refresh the view for us
        scope.$apply(function() {
            scope.Draw(NumQuest);
        });
        //fim
Run Code Online (Sandbox Code Playgroud)

编辑:为了使我的问题更清楚,我可以添加一些细节:

我只需要一个控制器和一个模块来控制我的整个应用程序,因为所需的所有操作(调用3个更新SVG图片的函数)是相对自包含的,所以我认为没有必要添加客户端代码的复杂性,这可能会让我和其他与我合作的人感到困惑.

回忆一下我需要的东西:

在一个应用程序中,有一个控制器,我有一个函数,Draw(someInputValue),它生成一个SVG图形.正在从文本输入框接收此功能的输入.

在另一个文件中,我有点击另一个文本框时执行的JS操作(例如,显示警告或创建其他文本框).我想要的是在单击文本框时将调用与Draw(输入)相关联.

也就是说,我想模拟当我点击一个从文本框中读取数字并执行某些操作的按钮时的行为,而是在文本框中手动输入输入并单击按钮,我只想单击一个文本框并执行相同的操作.

小智 3

在这种情况下,您可能希望使用 $broadcast 来转发您的消息/数据,并使用 $on 来执行操作。

然而,这种做法应该受到限制,并明智地使用,以确保您以后不会出现明显的性能影响。

使用 $scope.$emit 和 $scope.$on