2016-08-31 80 views
3

當我創建一個組件返回一個組件對象時,我的組件不會初始化!我正在分享這兩種情況。有人能解釋我有什麼不同嗎?AngularJS組件定義爲功能

HTML:

<div ng-app="demoApp"> 
    <navbar></navbar> 
</div> 

工作代碼:Fiddle

var NavbarTemplate = `<button ng-click="$ctrl.clickTest()">Click Test</button>`; 
var navbar = { 
    controller: function() { 
    this.clickTest = clickTest; 
    function clickTest() { 
     alert("hello"); 
    } 
    }, 
    template: NavbarTemplate 
}; 
angular.module('demoApp', []).component('navbar', navbar); 

故障(無誤差)代碼:Fiddle

function getComponent(){ 
    var template = `<button ng-click="$ctrl.clickTest()">Click Test</button>`; 
    var component = { 
    controller: function() { 
     this.clickTest = clickTest; 
     function clickTest() { 
      alert("hello"); 
     } 
    }, 
    template: template 
    } 
    return component; 
} 
angular.module('demoApp', []).component('navbar', getComponent); 
+2

是不是應該將它傳遞給對象文字?嘗試'.component('navbar',getComponent())' –

+0

@Daniel_L謝謝你的回答。我試過了,它工作。我熟悉使用指令:)。 – hurricane

回答

1

您需要括號添加到getComponent作爲參數傳遞到最後一行如下:

angular.module('demoApp', []).component('navbar', getComponent());

使用簡單getComponent(沒有括號)傳遞一個參考getComponent功能component()而不執行它。但是,角度期望包含組件配置的對象。

因此,通過getComponent()調用該函數並將通過該配置對象的組件配置對象返回給角component()初始化程序,而不是對函數getComponent的引用。