爲什麼我們需要在定製指令中使用BindToController。這個語法提供了什麼,我們不使用它就無法實現。我經歷了這麼多的文檔,但沒有得到我的答案。提前致謝!!爲什麼我們需要定製指令中的BindToController
0
A
回答
1
Angular一直試圖讓用戶遠離將數據直接放在$ scope上,而是將數據放入控制器中。其中一個主要動機是因爲控制器只是簡單的類,並且更容易進行單元測試。
此外,使用控制器而不是僅使用鏈接功能主要是出於同樣的原因。鏈接函數應該只用於DOM操作和其他非角度的東西,比如包裝一個jquery插件或者直接訂閱DOM事件。
所以把所有的一起,這裏是創建一個自定義指令
angular.module('app').directive('person', function() {
return {
restrict: 'E',
controller: PersonDirectiveController,
controllerAs: 'vm',
bindToController: true,
scope: {
'age': '='
},
link: function(scope, element, attributes) {
}
};
});
function PersonDirectiveController() {
var vm = this;
vm.name = 'Bob';
//vm.age is passed in through scope and because of bindToController
}
現在我們可以簡單地測試PersonDirectiveController直接而不是處理$範圍的首選方法
describe('PersonDirectiveController', function() {
it('has a name', function() {
var vm = new PersonDirectiveController();
expect(vm.name).toEqual('Bob');
});
});
2
您也可以在指令中使用controllerAs語法從Angular 1.3開始,您還需要添加bindToController
屬性以確保屬性綁定到控制器而不是範圍。 允許有一個例子:
(function() {
var app = angular.module('directivesModule');
app.directive('isolateScopeWithControllerAs', function() {
var controller = function() {
var vm = this;
vm.items = {}
vm.addItem = function() {
//Add new customer to directive scope
vm.items.push({
name: 'New Directive Controller Item'
});
};
};
var template = '<button ng-click="vm.addItem()">Add Item</button>' +
'<ul><li ng-repeat="item in vm.items">{{ ::item.name }}</li></ul>';
return {
restrict: 'EA', //Default for 1.3+
scope: {
datasource: '=',
add: '&',
},
controller: controller,
controllerAs: 'vm',
bindToController: true, //required in 1.3+ with controllerAs
template: template
};
});
}());
在vm
此控制器別名分配給controllerAs
屬性和別名在控制器代碼,並在視圖中使用。 bindToController
屬性設置爲true以確保屬性綁定到控制器而不是範圍。
相關問題
- 1. 爲什麼我需要遮罩指令?
- 2. 爲什麼我們需要在Apache Kafka中指定Serializer?
- 3. 爲什麼我們需要在Spring中指定HttpMessageConverter?
- 4. 爲什麼我不需要父指令的子指令?
- 5. 爲什麼我們需要指定init方法?
- 6. 爲什麼我們需要git add命令中的文件名?
- 7. 爲什麼我們需要.htaccess的worpdress?
- 8. 爲什麼我們需要指針的不同數據類型?
- 9. DavLockDB:我們需要什麼?
- 10. 爲什麼我們需要simple_one_for_one?
- 11. 爲什麼我們需要TensorFlow tf.Graph?
- 12. 爲什麼我們需要使用prompt.start()?
- 13. 爲什麼我們需要scalaz.stream迭代?
- 14. 爲什麼我們需要WCF
- 15. 爲什麼我們需要Anaconda 2.7?
- 16. 爲什麼我們需要編寫log.isDebugEnabled?
- 17. 爲什麼我們需要ng-click?
- 18. 爲什麼我們需要Control.Lens.Reified?
- 19. 我們爲什麼需要纖維
- 20. 爲什麼我們需要org.junit.ComparisonFailure?
- 21. 爲什麼我們需要addRequestHeader方法?
- 22. 爲什麼我們需要時代?
- 23. 爲什麼我們需要ContinueWith方法?
- 24. 爲什麼我們需要Java NIO Selector?
- 25. 爲什麼我們需要使用ExitWindowsEx
- 26. 爲什麼我們需要包裝類
- 27. 爲什麼我們需要在JavaScript
- 28. 爲什麼我們需要設置SONAR_RUNNER_OPTS?
- 29. 爲什麼我們需要ioc容器
- 30. mongodb爲什麼我們需要getSisterDB
另外爲什麼我們要在指令中創建Controller。 –