ko.components.register('component-name', { viewModel: {...}, //function code template: {....) //function code });
| Sr.No. | viewModel 表单和描述 |
| 1 |
构造函数
它为每个组件创建一个单独的viewModel对象。对象或函数用于在组件视图中绑定。
function SomeComponentViewModel(params) {
this.someProperty = params.something;
}
ko.components.register('component name', {
viewModel: SomeComponentViewModel,
template: ...
});
|
| 2 |
共享对象实例
viewModel 对象实例是共享的。传递实例属性直接使用对象。
var sharedViewModelInstance = { ... }; ko.components.register('component name', { viewModel: { instance: sharedViewModelInstance }, template: ... }); |
| 3 |
createViewModel
它调用了一个作为工厂的函数,可以用作可以返回对象的视图模型。
ko.components.register('component name', { viewModel: { createViewModel: function (params, componentInfo) { ... //function code ... } }, template: .... }); |
| 4 |
AMD 模块
它是一种模块格式,用于定义模块和依赖项都异步加载的模块。
ko.components.register('component name', { viewModel: { require: 'some/module/name' }, template: ... }); define(['knockout'], function(ko) { function MyViewModel() { // ... } return MyViewModel; }); |
| Sr.No. | 模板表单 |
| 1 |
元素 ID
ko.components.register('component name', { template: { element: 'component-template' }, viewModel: ... }); |
| 2 |
元素实例
var elemInstance = document.getElementById('component-template'); ko.components.register('component name', { template: { element: elemInstance }, viewModel: ... }); |
| 3 |
标记字符串
ko.components.register('component name', { template: '<input data-bind = "value: yourName" />\ <button data-bind = "click: addEmp">Add Emp </button>', viewModel: ... }); |
| 4 |
DOM 节点
var emp = [ document.getElementById('node 1'), document.getElementById('node 2'), ]; ko.components.register('component name', { template: emp, viewModel: ... }); |
| 5 |
文件碎片
ko.components.register('component name', { template: someDocumentFragmentInstance, viewModel: ... }); |
| 6 |
AMD 模块
ko.components.register('component name', { template: { require: 'some/template' }, viewModel: ... }); |
ko.components.register('component name',{ require: 'some/module'});
<div data-bind='component: {
name: "tutorials point",
params: { mode: "detailed-list", items: productsList }
}'>
</div>
<div data-bind = 'component: "component name"'></div>
ko.components.register('component name', { template:'<input data-bind = "value: someName" />, });
<!--ko.component: ""-->
<!--/ko-->
<products-list params = "name: userName, type: userType"></products-list>
<some-component
params = 'simpleExpression: 1 + 1,
simpleObservable: myObservable,
observableExpression: myObservable() + 1'>
</some-component>
<some-component
params = 'objectValue:{a: 3, b: 2},
dateValue: new date(),
stringValue: "Hi",
numericValue:123,
boolValue: true/false,
ModelProperty: ModelValue'>
</some-component>
template: { nodes: $componentTemplateNodes }
ko.components.getComponentNameForNode = function(node) { ... ... //function code ... }
ko.components.register('custom-element', { ......... });
<!DOCTYPE html>
<head>
<title>KnockoutJS Components</title>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
</head>
<body>
<!--params attribute is used to pass the parameter to component viewModel.-->
<click params = "a: a, b: b"></click>
<!--template is used for a component by specifying its ID-->
<template id = "click-l">
<div data-bind = "text: a"></div>
<!--Use data-bind attribute to bind click:function() to ViewModel.-->
<button data-bind = "click:function(){callback(1)}">Increase</button>
<button data-bind = "click:function(){callback(-1)}">Decrease</button>
</template>
<script>
//Here components are registered
ko.components.register('click', {
viewModel: function(params) {
self = this;
this.a = params.a;
this.b = params.b;
this.callback = function(num) {
self.b(parseInt(num));
self.a( self.a() + parseInt(num) );
};
},
template: { element: 'click-l' }
});
//keeps an eye on variable for any modification in data
function viewModel() {
this.a = ko.observable(2);
this.b = ko.observable(0);
}
ko.applyBindings(new viewModel() );
</script>
</body>
</html>
ko.components.defaultLoader
| Sr.No. | 实用功能和说明 |
| 1 |
ko.components.register(name, configuration)
组件已注册。
|
| 2 |
ko.components.isRegistered(name)
如果特定的组件名称已经注册,则返回真,否则返回假。
|
| 3 |
ko.components.unregister(name)
组件名称从注册表中删除。
|
| 4 |
ko.components.get(name, callback)
这个函数会轮流到每个注册的loader去寻找谁通过了viewModel/template定义对于组件名称作为第一个。然后它通过调用
callback 返回 viewModel/template 声明。如果注册的加载器找不到有关组件的任何信息,则它会调用
callback(null)。
|
| 5 |
ko.components.clearCachedDefinition(name)
当我们想清除给定的组件缓存条目时可以调用这个函数。如果下次需要该组件,将再次咨询加载程序。
|