【发布时间】:2014-03-08 12:17:16
【问题描述】:
我在控制器范围内有一个对象,其中包含一些用于输入的表示数据:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.settings = {
value: 'xxx',
required: true,
show: true,
readonly: false
};
});
在实际应用中,这是从服务器加载的更大对象的一部分。我创建了一个指令,将这个演示对象作为输入并附加必要的指令:
app.directive('fieldSettings',
[/*$injectables*/
function (/*$injectables*/) {
return {
priority: 100,
restrict: 'A',
scope: {
fieldSettings: '='
},
compile: function (el, attrs) {
return function (scope, iElement, iAttrs) {
iAttrs.$set('ng-model', 'fieldSettings.value');
iAttrs.$set('ng-show', 'fieldSettings.show');
iAttrs.$set('ng-required', 'fieldSettings.required');
iAttrs.$set('ng-readonly', 'fieldSettings.readonly');
}
}
};
}
]);
正如plunk 所示,添加了属性但未应用逻辑。根据 Angular 的文档,我尝试应用的指令的优先级为 0,而 input 指令的优先级为 100。我将我的设置为100,但无论我为它选择什么值,这个值似乎都没有影响。
我想要
<input field-settings="settings" />
表现得像
<input ng-model="settings.value" ng-show="settings.show" ng-required="settings.required" ng-readonly="settings.readonly" />
但实际上是
<input ng-model="fieldSettings.value" ng-show="fieldSettings.show" ng-required="fieldSettings.required" ng-readonly="fieldSettings.readonly" />
其中fieldSettings 是指令的局部范围变量,绑定到MaintCtrl 的局部范围变量settings。
【问题讨论】:
标签: javascript angularjs