angularjs
2016-01-22 65 views 0 likes 
0

我試圖讓我的頭部圍繞Angular 1組件。我寫了一個簡單的組件,它會在init中設置一個背景顏色,然後用按鈕單擊來改變顏色。訪問其控制器的角度組件

下面的代碼:

<shadow colour="black"></shadow> 

app.component('shadow', { 
    bindings: { 
     colour: '=' 
    }, 
    controller: function() { 
     function setColour(col) { 
      this.colour = col; 
     } 
    }, 
    scope: {}, 
    template: ['<div ', 
     'style="background: {{ shadow.colour }}; width: 100px; height: 100px;">', 
     '<button ng-click="shadow.setColour(red)">Button</button>', 
    '</div>'].join('') 
}); 

不幸的是,這是行不通的。根據我讀過的內容,當沒有傳遞controllerAs時,Angular會認爲組件名稱是控制器名稱。所以我嘗試着這樣寫。我哪裏做錯了?

回答

1

如果沒有通過控制器,Angular會自動使用名稱'$ ctrl'。從角源:

controllerAs: identifierForController(options.controller) || options.controllerAs || '$ctrl', 

EDIT 1:

  1. 此外,綁定應該是 '@' 而不是 '='。
  2. 您從未將函數「setColour」設置爲控制器本身。

編輯2:

校正代碼將是這樣的:

app.component('shadow', { 
    bindings: { 
     colour: '@' 
    }, 
    controller: function() { 
     this.colourSecondary = 'red'; 

     this.setColour = setColour; 

     function setColour(colour) { 
      this.colour = colour; 
     } 
    }, 
    scope: {}, 
    template: ['<div ', 
     'style="background: {{ $ctrl.colour }}; width: 100px; height: 100px;">', 
     '<button ng-click="$ctrl.setColour($ctrl.colourSecondary);">Button</button>', 
     '</div>'].join('') 
}); 

綁定與 '@' 取字符串或內插變量例如{{color}}。

對於'=',角度需要一個範圍變量,其名稱'color'不存在。

+0

我試圖用'NG點擊=」 $ ctrl.setColour('black')「'但它也不起作用。 –

+0

檢查編輯請 – Prashant

+0

您的代碼也不起作用。 我試着在我的控制器裏設置'this.setColour = setColour;',沒有幫助。 –

0

我願意做它像這樣:

angular 
    .module('yourModule') 
    .directive('shadow', shadow); 

function shadow() { 
    return { 
     scope: { 
      colour: '=?' 
     }, 
     restrict: 'AE', 
     template: '<div style="background: {{colour}}; width: 100px; height: 100px;"></div>' 
    }; 
} 

在HTML:

<button ng-click="setColor('red')">Button</button> 
<shadow color="{{yourColor}}"></button> 

,並在你的主指令:

$scope.setColor = function(newColor){ 
    $scope.yourColor = newColor; 
} 
+0

由於Angular 1.5'component'已被引入到Angular 1中,因此將它移植到A2應該更容易。 –

+0

不知道,我會檢查它,謝謝 – Damiano

+0

你不應該在顏色屬性上需要花括號。 – ste2425

相關問題