Фон
У нас есть старый проект, разработанный с помощью Angular 1.4.8.Например:
// controller
$scope.nameOpts = {
...
};
$scope.type = {
...
};
// view
<my-form label-width="labelWidth">
<my-item >
<my-item-label>
<span class="form-title-txt fs-txt" ng-bind="i18n.name"></span>
</my-item-label>
<div class="clearfix">
<div class="f-left">
<input class="w311"
ng-style="{width: 2 * i18n.btn_width}"
ng-model="nameOpts.name"
ng-change="nameOpts.change(nameOpts.name)">
</div>
</div>
</my-item>
<my-item>
<my-item-label>
<span class="form-title-txt cmn-fs-txt" ng-bind="i18n.list_index"></span>
</my-item-label>
<div class="f-left" >
<my-btn-radio-group
items="type.items"
selected-id="type.selectedId"
change="type.change">
</my-btn-radio-group>
</div>
</my-item>
...
</my-form>
Мы хотим реорганизовать проект с помощью пользовательских компонентов, используя директивы.Ниже приведен код нашего компонента.
// myNameInput component
define([], function () {
function ctrl($scope) {
$scope.nameOpts = {...};
...
}
return {
templateUrl: 'name.html',
replace: true,
scope: {},
controller: ctrl
};
});
// name.html
<div>
<my-item>
<my-item-label>
<span class="form-title-txt fs-txt" ng-bind="i18n.name"></span>
</my-item-label>
<div class="clearfix">
<div class="f-left">
<input class="w311"
ng-style="{width: 2 * i18n.btn_width}"
ng-model="nameOpts.name"
ng-change="nameOpts.change(nameOpts.name)">
</div>
</div>
</my-item>
</div>
Нам требуется компонент в контроллере и мы используем его в представлении:
// controller
define([
'app/components/insCharSet/charSet'
], function () {...});
// view
<my-form label-width="labelWidth">
<my-name-input></my-name-input>
...
</my-form>
Проблема
Мы можем разработать компоненты с директивами.Но производительность не очень хорошая.Сравните с представлением предыдущим способом, компоненты рендеринга будут медленнее.
У меня есть несколько вопросов:
1) почему пользовательские компоненты отображаются медленнее?
2) Хотя положение компонента my-name-input
раньше, на самом деле он отображается после my-btn-radio-group
, почему?
3) Рекомендуется ли использовать пользовательские компоненты с Angular 1.4?
4) Или как лучше?