从其他脚本调用AngularJS

wut*_*aer 2 javascript angularjs

应用.现在我想用AngularJS实现一个动态菜单.因此,我需要从现有的应用程序中更改AngularJS应用程序中的变量.

我正在尝试这个例子:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl" id="myApp">

  First Name:
  <input type="text" ng-model="firstName">
  <br>Last Name:
  <input type="text" ng-model="lastName">
  <br>
  <br>Full Name: {{firstName + " " + lastName}}
  <button ng-click="resetName()">hi</button>

</div>

<script type="text/javascript">
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
  $scope.firstName = "John";
  $scope.lastName = "Doe";
  $scope.resetName = function() {
    $scope.firstName = "John1";
    $scope.lastName = "Doe1";
  }
});

</script>

<button onclick="angular.element('#myApp').scope().resetName(); angular.element('#myApp').scope().apply();">extern</button>
Run Code Online (Sandbox Code Playgroud)

从外部脚本调用"resetName()"函数的正确方法是什么?

Vin*_*eet 8

只需将选择器附加到定义控制器的DOM元素即可.喜欢

<div ng-app="myApp" ng-controller="myCtrl" id="myCtrl">
Run Code Online (Sandbox Code Playgroud)

从任何地方你都可以调用这个控制器功能

angular.element('#myCtrl').scope().resetName()
Run Code Online (Sandbox Code Playgroud)

要么

angular.element(document.querySelector('#myCtrl')).scope().resetName()
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您需要修改控制器的对象值,您可以以简单的方式执行它.只是用

angular.element(document.querySelector('#myCtrl')).scope().title = 'test';
Run Code Online (Sandbox Code Playgroud)

注意:请不要忘记apply更改,因为现在角度不会apply自动触发.您需要apply手动触发.在更新object/s中的值后,将其放在下面

angular.element(document.querySelector('#myCtrl')).scope().apply();
Run Code Online (Sandbox Code Playgroud)

  • @wutzebaer - 除此之外,如果你需要在控制台中测试Angular函数,你也可以使用上面的`var z = angular.element('#myCtrl').scope(); z.resetName("Test Param");` (2认同)
  • 好吧,我发现了两个问题:1:你必须等待document.ready才能访问外部,2:该函数被称为$ apply() (2认同)