2015-06-14 64 views
0

裏面我有點newbiew與javascript,我開始使用angular.jsAngularjs:注入控制器模塊匿名函數

所以我的問題是,如果有一種方法來注入是聲明在一個模塊內的控制器匿名函數

我的代碼看起來像這樣

app.js

(function(angular) { 
    var app = angular.module('Organizer', ['ngMaterial', 'ngAnimate', 'ngAria']); 
})(angular); 

siteController.js

(function(angular, app) { 
    app.controller('site', function($scope, $mdDialog) 
    { 
     var alert = $mdDialog.alert({ 
      title: 'Test', 
      content: 'Testing', 
      ok: 'Exit' 
     }); 

     $mdDialog.show(alert); 
    }); 
})(angular); 

我試圖尋找方法,如果有可能,但我仍想看看是否有人在這裏可以解釋如何能如果能進行。

注:我已經使用angular.js之前,我想嘗試不同的方法來聲明控制器,以便客戶端不會有任何的方式來修改它

回答

2

如果創建角模塊,那麼你就可以不以這種方式混淆它。在控制檯中,用戶可以運行angular.module('Organizer')以訪問您的應用程序,然後調用他們想要的任何方法。

您的代碼無法正常工作的原因是因爲您沒有將app變量傳遞給您的匿名函數。所以,如果你想將控制器添加到Organizer模塊,那麼你會做這樣的事情:

(function(angular) 
{ 
    angular. 
     module('Organizer'). 
     controller('site', function($scope, $mdDialog) 
     { 
      ... 
     }); 
})(angular); 
+0

好,感謝您的解釋,我將標誌着這個作爲解決方案 – nosthertus

1

世界上沒有必要換此代碼的任何自我執行的功能,如果你想保持變量出來全球範圍內。唯一一個全球化的是「角度」對象。

你app.js應該只有

'use strict'; 
angular.module('Organizer', ['ngMaterial', 'ngAnimate', 'ngAria']); 

您控制文件應該只有

'use strict'; 
angular.module('Organizer').controller('siteController', function($scope, $mdDialog) { 
    var alert = $mdDialog.alert({ 
     title: 'Test', 
     content: 'Testing', 
     ok: 'Exit' 
    }); 

    $mdDialog.show(alert); 
}); 

第一次調用在app.js到模塊通過角用來實例化的第二個參數的模塊。後續調用忽略第二個參數「獲取」模塊。

+0

這也是一個解決辦法,但我已經在其他的方式 – nosthertus

+0

@nosthertus它不是「也是一種解決方案」它的標準的方式來做事編碼angularjs。 –