【问题标题】:Call AngularJS from other scripts从其他脚本调用 AngularJS
【发布时间】:2015-08-14 13:39:55
【问题描述】:

应用程序。现在我想用 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>

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

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

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

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

    你可以在任何地方调用这个控制器函数,比如

    angular.element('#myCtrl').scope().resetName()
    

    angular.element(document.querySelector('#myCtrl')).scope().resetName()
    

    在某些情况下,您需要修改控制器的对象值,您可以通过简单的方式来完成。只需使用

    angular.element(document.querySelector('#myCtrl')).scope().title = 'test';
    

    注意:请不要忘记 apply 所做的更改,因为现在 angular 不会自动触发 apply。您需要手动触发apply。更新 object/s 中的值后,只需放在下面的行

    angular.element(document.querySelector('#myCtrl')).scope().apply();
    

    【讨论】:

    • @wutzebaer -- 除此之外,如果您需要在控制台中测试 Angular 功能,您也可以使用上面的 var z = angular.element('#myCtrl').scope(); z.resetName("Test Param");
    • @tymeJV 完全同意(y)
    • 是否可以像这样更改范围变量:angular.element('#topMenu').scope().title = "test"; - 我试过但得到一个错误:错误:[jqLit​​e:nosel]errors.angularjs.org/1.4.2/jqLite/nosel
    • 试试angular.element(document.querySelector('#myCtrl')).scope().title = "test";
    • ok 我发现了两个问题:1:必须等待document.ready才能访问外部,2:函数调用$apply()
    猜你喜欢
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多