gpt4 book ai didi

javascript - 如何使用指令设置其他指令?

转载 作者:行者123 更新时间:2023-11-30 17:37:51 26 4
gpt4 key购买 nike

我在 Controller 范围内有一个对象,它包含一些输入的表示数据:

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 是绑定(bind)到 MaintCtrl 的局部范围变量 settings 的指令的局部范围变量。

最佳答案

只添加属性而不编译不会做任何事情。

我的类似回答:

这是一个笨蛋:http://plnkr.co/edit/8kno6iwp3hH5CJFQt3ql?p=preview

工作指导:

app.directive('fieldSettings',
['$compile',
function ($compile) {
return {
restrict: 'A',
scope: {
fieldSettings: '='
},
priority: 1001,
terminal: true,
compile: function(tElm,tAttrs){
tElm.removeAttr('field-settings')
tElm.attr('ng-model', 'fieldSettings.value');
tElm.attr('ng-show', 'fieldSettings.show');
tElm.attr('ng-required', 'fieldSettings.required');
tElm.attr('ng-readonly', 'fieldSettings.readonly');
var fn = $compile(tElm);
return function(scope){
fn(scope);
}
}
};
}

关于javascript - 如何使用指令设置其他指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com