亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從單獨的 js 文件中調用有角度的 $scope 函數?

如何從單獨的 js 文件中調用有角度的 $scope 函數?

Helenr 2021-09-17 16:28:53
我正在調試別人的軟件。它使用 Angular 1.5.9,我對它不是很熟悉,也無法找到我問題的答案。我想從單獨的 js 文件中的另一個控制器調用存在于單獨控制器中的 $scope 函數。下面的廣播語句引發錯誤,我不確定為什么?“類型錯誤:無法讀取 null 的屬性‘$broadcast’”這是代碼:控制器 1 :app.controller('FilterController', function ($scope, $filter, $uibModalInstance, errorService, dataService, values) {    $scope.sortByColumn = function () {      var data = { 'editorID': $scope.editorID(), 'filter':       dataService.data.objFilterColumns };      dataService.getData('UpdateFilter', data).then(function (response) {        $uibModalInstance.dismiss('cancel');        //I WANT TO CALL THE SCOPE 'reloadData' FUNCTION HERE        $scope.$emit('reloadData', data);        //this broadcast statement was already there but it throws error         $scope.$parent.$broadcast('sortbyColumn', $scope.userFilters, $scope.column.strColumnName, $scope.orderDir, dataService.data.objFilterColumns);    });  });控制器 2 : app.controller("myCtrl", ["$scope","$http","$uibModal","$log","$location","$window","dataService","errorService","lookupService", function ($scope, $http, $uibModal, $log, $location, $window, dataService, errorService, lookupService) {    $scope.loadPage = function (data, message, removeFilter, byColumn,  orderDir) {    //I want to call this function from the other controller   }  $scope.$on("reloadData", function () {     $scope.loadPage();  });  $scope.$on("sortbyColumn", function (event, filters, column, orderDir, filter) {    //some code  });}]);謝謝你的幫助
查看完整描述

3 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

在 app.js 文件中為每個控制器定義全局 javascript 變量,類似于給定的。

var PayRateScope, ManageResourceScope, sequenceScopePA;


現在在您的控制器中,在 app.controller 方法定義的末尾,將 $scope 分配給相應的全局范圍變量。例如。

// Payrare Controller

app.controller('PayRateAdminController', function ($scope, $compile, $http, $timeout) {

   // your code and functions

  PayRateScope = $scope;

});


//ManageResource Contoller

app.controller('ManageResourceController', function ($scope, $compile, $http, $timeout) {

   // your code and functions

  ManageResourceScope = $scope;

});


現在,您將能夠在任何外部 js 中使用它的全局變量訪問相應控制器內的函數,例如,

PayRateScope.FunctionName();


查看完整回答
反對 回復 2021-09-17
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

您可以使用服務:


app.service('someService', function () {

    this.loadPage = function (data, message, removeFilter, byColumn, orderDir) {

        //...

    };

});

并將其注入控制器:


控制器 1:


app.controller('FilterController',["$scope","someService" */andOther/*, function ($scope, someService) {

    $scope.sortByColumn = function () {

      var data = { 'editorID': $scope.editorID(), 'filter': 

      dataService.data.objFilterColumns };


      dataService.getData('UpdateFilter', data).then(function (response) {

        $uibModalInstance.dismiss('cancel');


       someService.loadPage(...parameters);



  });

控制器2:


 app.controller("myCtrl", ['$scope','someService' ,function($scope, someService){

    $scope.loadPage = someService.loadPage(data, message, removeFilter, byColumn, 

 orderDir);


}]);

來自 AngularJS 文檔:


AngularJS 服務是使用依賴注入 (DI) 連接在一起的可替換對象。您可以使用服務在您的應用程序中組織和共享代碼。


AngularJS 服務是:


延遲實例化——AngularJS 僅在應用程序組件依賴它時實例化服務。單例 - 依賴于服務的每個組件都獲得對服務工廠生成的單個實例的引用。


查看完整回答
反對 回復 2021-09-17
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

首先,您需要了解 $broadcast()、$emit() 和 $on() 之間的區別

$broadcast() - 從父控制器向子控制器發送一個均勻的向下。

$emit() - 從當前控制器向上發送一個事件到它的所有父控制器

$on - $broadcast() 和 $emit() 引發的事件可以通過使用 $on() 連接事件處理程序來處理

$scope.$parent - 意味著您訪問父控制器范圍。這將幫助您訪問父控制器中的變量和方法。

看起來像這樣。

http://img1.sycdn.imooc.com//614451f20001c0a605920402.jpg

希望這會讓您清楚這些條款。

查看完整回答
反對 回復 2021-09-17
  • 3 回答
  • 0 關注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號