2

rootScope 変数に基づいてページ上のすべてのフォーム要素を無効にするディレクティブに取り組んでいます (手動ですべての項目に ng-disabled を追加するのと似ていますが、より便利な方法です。既存のアプリを作り直してドンたくさんのテンプレートを掘り下げたくない)

複数の jqlite .find() ステートメントの結果を連結できる必要があります。jqlite が .find('select,input') のような呼び出しをサポートしているようには見えません。私は常に空の配列を取得します。また、オブジェクトを返すため、単純に連結することはできません。私はおそらくこれからフェイスパームを手に入れるでしょうが、私はあなたに頼ります、StackOverflow。

var myApp = angular.module('myApp',[]);

myApp.directive('disableContents', function() {
    return {
        compile: function(tElem, tAttrs) {
            var inputs = tElem.find('input');
            var selects = tElem.find('select');

            var formItems = SOMETHINGTOJOINTHESTUFFABOVE
            angular.forEach(formItems, function(el){
...

これまでに私が思いついたものはここにありますが、複数の foreach ステートメントを使用するとバグが発生します。

'use strict';
angular.module('induction').directive('sttiDisabled', function() {
    return {
        compile: function(tElem, tAttrs) {
            var inputs = tElem.find('input');
            var selects = tElem.find('select');

            var applyDisable = function(el) {
                el = angular.element(el);
                var prevVal = el.attr('ng-disabled');
                prevVal = prevVal? prevVal +  ' || ': '';
                prevVal += tAttrs['sttiDisabled'];
                el.attr('ng-disabled', prevVal);
            }

            angular.forEach(inputs, function(el){
                applyDisable(el);
            });

            angular.forEach(selects, function(el){
                applyDisable(el);
            });


        }
    }
});
4

3 に答える 3

1

jqLite( angular.element ) は実際には複雑なセレクターをサポートしていないため、最初にquerySelectorAllで必要なものをすべて選択してから、このコレクションをangular.elementインスタンスでラップする必要があります。

var formControls = angular.element(tElem[0].querySelectorAll('input, select'));
于 2015-12-09T14:37:40.503 に答える