0

我試圖從指令的控制器中獲取一些變量或調用一些方法,但它不起作用。AngularJS - 控制器不能在內部工作

我已經導入了所有需要的文件,並注入了所有需要的東西。 如果我使用相同的方法,但我使用templateUrl它正在工作,但這不是,我做錯了什麼?

這只是我的代碼的一部分。

class Application { 

    constructor($router, alertsHandlerService) { 
     this.$router = $router; 
     this.routing(); 
     this.alertsHandlerService = alertsHandlerService; 
     console.log("app construct"); 

    } 



    routing(){ 
     this.$router.config(
      { 
       path: '/', 
       component: {'main': 'main'} // view-name:component => name.html, NameController 
      } 
     ); 
    } 

    skuska(){ 
     console.log("skuska called"); 
    } 
} 

Application.$inject = ['$router', 'alertsHandlerService']; 

export default function() { 
    return { 
     scope: {}, 
     controller: Application, 
     controllerAs: 'applicationCtrl' 
    }; 
}; 

我的縮短HTML文件

<html lang="en" ng-app="agenda" application class="no-js"> <!--<![endif]--> 
<body> 
{{ applicationCtrl.skuska() }} 
</body> 
</html> 

回答

0

你需要你的agenda模塊中註冊Application控制器。

import Application from './path/to/controller/Application.js'; 
import applicationDirective from './path/to/directive/application.js'; 

Application.$inject = ['$router', 'alertsHandlerService']; 

angular 
    .module('agenda', []) // app dependencies 
    .controller('ApplicationCtrl', Application) 
    .directive('application', applicationDirective); 

,然後你只是做

function applicationDirective() { 

    return { 
     restrict: 'A', 
     controller: 'ApplicationCtrl', 
     controllerAs: 'ctrl' 
    }; 
} 

export default applicationDirective; 

class Application { 

    constructor($router, alertsHandlerService) { 
     this.$router = $router; 
     this.routing(); 
     this.alertsHandlerService = alertsHandlerService; 
     console.log("app construct"); 
    } 

    routing(){ 
     this.$router.config(
      { 
       path: '/', 
       component: {'main': 'main'} // view-name:component => name.html, NameController 
      } 
     ); 
    } 

    skuska(){ 
     console.log("skuska called"); 
    } 
} 

export default Application; 

像這樣的東西應該正常工作(未測試)。

+0

@marnitas我有類似你寫的東西,除了我註冊應用程序在另一個模塊,然後注入議程模塊作爲依賴 – Stevik

+0

所以我認爲你打破單一責任的規則。控制器應該專用於特定的視圖或指令。如果你想讓你的控制器更加可重用,我認爲你應該考慮繼承。但仍然 - 模塊應該是單一責任人。 – marnits