javascript - Angular js指令: How to set selected value or default value

标签 javascript jquery html angularjs

我创建了指令表单控件(tesxt、select、radio)。在指令中,我传递一个我想在指令函数中访问的值,如果该值未设置或为空,则设置问题中的默认值(data._pageAttributes.defaultValue)

HTML

<div ng-repeat="que in questions[$state.current.name]">
                        <div ng-if="que.QuestionData._fieldType === 'text'" >
                            <!-- {{answers[que.QuestionData._attributeName]}} -->
                            <text-control-dir data="que.QuestionData" default="94403"></text-control-dir>
                        </div>  
                        <div ng-if="que.QuestionData._fieldType === 'select'" >
                            <select-control-dir data="que.QuestionData" default="2016"></select-control-dir>
                        </div>
                        <div ng-if="que.QuestionData._fieldType === 'radio'" >
                            <radio-control-dir data="que.QuestionData"></radio-control-dir>
                        </div>
                        <div ng-if="que.QuestionData._fieldType === 'hidden' && que.QuestionData._attributeName != 'CBQ'" >
                            <hidden-control-dir data="que.QuestionData"></hidden-control-dir>
                        </div>
                    </div>

controlDirective.js

(function () {
    "use strict";

    angular
            .module("autoQuote")
            .directive('textControlDir', [textControlDir])
            .directive('selectControlDir', [selectControlDir])
            .directive('radioControlDir', [radioControlDir])
            .directive('hiddenControlDir', [hiddenControlDir]);

    function textControlDir()
    {
        return {
            transclude: true,
            restrict: 'E',
            scope: {
                data: '=data',
                default: '=default'
            },
            template: "<div ng-transclude></div><label>{{data._text}} </label><input ng-model='answer.PC' type='text' name='{{data._attributeName}}' id='{{data._attributeName}}' value='' >"
            ,
            link: function (scope, element, attrs)
            {
                console.log('default');
                console.log(attrs.default);
                if(attrs.default == '')
                {
                    attrs.default = data._pageAttributes.defaultValue;
                }

            }
        };
    }

    function selectControlDir()
    {
        return {
            transclude: true,
            restrict: 'E',
            scope: {
                data: '=data'
            },
            template: "<div ng-transclude></div><label>{{data._text}} </label><select type='text' name='{{data._attributeName}}' id='{{data._attributeName}}' >\n\
<option ng-repeat='ans in data._answerOptions'>{{ans._promptText}}</option></select>"
            ,
            link: function (scope, element, attrs)
            {
                //console.log("scope.data.QuestionData", scope.data.QuestionData);
            }
        };
    }

    function radioControlDir()
    {
         return {
            transclude: true,
            restrict: 'E',
            scope: {
                data: '=data'
            },
            template: "<div ng-transclude></div><label>{{data._text}} </label><input type='radio' name='{{data._attributeName}}' id='{{data._attributeName}}' value='Yes' >\n\
\n\
<input type='radio' name='{{data._attributeName}}' id='{{data._attributeName}}' value='No' >\n\
"
            ,
            link: function (scope, element, attrs)
            {
                //console.log("scope.data.QuestionData", scope.data.QuestionData);
            }
        };
    }

    function hiddenControlDir()
    {
        return {
            transclude: true,
            restrict: 'E',
            scope: {
                data: '=data'
            },
            template: "<div ng-transclude></div><label>{{data._text}} </label><input type='hidden' name='{{data._attributeName}}' id='{{data._attributeName}}' value='' >"
            ,
            link: function (scope, element, attrs)
            {
                //console.log(scope.data);
            }
        };
    }

}());

CA.js 文件包含我们为表单问题循环的所有问题和默认值。

在指令中,我想编写操作来检查默认属性中是否传递了值。如果没有,则从 Question.que 获取值并在输入和选择控件中设置选中。

 link: function (scope, element, attrs)
        {
            if(attrs.default == '')
            {
                attrs.default = data._pageAttributes.defaultValue;
            }

        }

但这对我不起作用。 在这里,我为文本(邮政编码)94403 和车辆年份 2016 设置了硬编码的默认值

对于邮政编码:应在输入框中填写 94403,如果没有填写,则为空白,然后填写 35004(来自 CA.json)

最佳答案

如果您不设置默认值,它将是未定义而不是空字符串

link: function (scope, element, attrs)
       {
           if(attrs.default)
           {
               attrs.default = scope.data._pageAttributes.defaultValue;
           }

       }

它将检查emptyundefined

关于javascript - Angular js指令: How to set selected value or default value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38495944/

相关文章:

javascript - 文件(任何类型)的动态幻灯片

javascript - AngularJS:在任何部分页面 Controller 之前调用特定函数

jquery - 如何将 jquery maphilight 居中对齐?

javascript - 将 $.getJSON 的结果传递给同一个类的另一个方法

javascript - 单击将您移动到另一个站点的按钮后对 DIV 进行排序

jquery - 如何隐藏和切换一个 HTML 文件中的部分

javascript - 具有特定宽度的水平向导导航

javascript - 如何在 jSTL fmt 标签中传递 javascript 变量?

javascript - 如何上传带有文本帖子的图像 AJAX、php 和 html

javascript - 如何以动态形式创建和存储多个输入的值?