Javascript 带Select的AngularJS指令

Javascript 带Select的AngularJS指令,javascript,angularjs,angularjs-directive,binding,Javascript,Angularjs,Angularjs Directive,Binding,我在使用angular 1.6.5时遇到问题,尝试了所有方法,但没有任何明显的进展 我做了一个指令来实现HTMLSELECT标记,在我尝试在option-value属性中获取整个对象而不是单个值或ID之前,该组件似乎一直工作。 我可以输出选项标记的文本作为对象的属性,也可以通过函数返回字符串 下面是对组件和问题的完整处理。 有3个例子: 第一个似乎工作正常,它打印正确的文本并返回正确的值 第二个:不工作,我想将整个选定对象设置为模型,而不是属性 第三个:不工作,我想将整个选定对象设置为模型,而不

我在使用angular 1.6.5时遇到问题,尝试了所有方法,但没有任何明显的进展

我做了一个指令来实现HTML
SELECT
标记,在我尝试在
option-value
属性中获取整个对象而不是单个值或ID之前,该组件似乎一直工作。 我可以输出选项标记的文本作为对象的属性,也可以通过函数返回字符串

下面是对组件和问题的完整处理。 有3个例子:

  • 第一个似乎工作正常,它打印正确的文本并返回正确的值

  • 第二个:不工作,我想将整个选定对象设置为模型,而不是属性

  • 第三个:不工作,我想将整个选定对象设置为模型,而不是属性,但它可以正确打印父控制器中某个函数的文本

  • 如何更改组件,使其既可以返回属性(如ID),也可以返回整个对象(JSON格式良好)

    angular.module(“myApp”、['customDrop']).controller(“TestController”、['$scope',function($scope){
    变量项_选择={
    ID:3,
    价值:“价值3”
    };
    $scope.LIST=[{
    ID:1,
    值:“值1”
    },
    {
    ID:2,
    价值:“价值2”
    },
    所选项目,
    ];
    $scope.OBJ={
    乐透1:所选项目,
    乐透2:选择的项目,
    乐透3:选择的项目
    };
    $scope.getCompleteValue=函数(obj){
    返回obj.ID+“-”+obj.VALUE;
    }
    }]);
    angular.module('customDrop',[])指令('customDrop',function(){
    返回{
    限制:'E',
    范围:{
    dropid:“@”,
    dropvalue:'&',
    列表:“=”,
    ngModel:“=”
    },
    要求:'ngModel',
    模板:“”+
    “{{getValue(val)}}”+
    '',
    控制器:[“$scope”、“$parse”、“$timeout”,
    函数($scope、$parse、$timeout){
    $scope.getId=函数(obj){
    返回obj[$scope.dropid];
    }
    //可以打印文本选项作为父作用域中贯穿函数的权限。
    $scope.getValue=函数(obj){
    return!angular.isFunction($scope.dropvalue(obj))?
    $scope.dropvalue(obj):
    $parse($scope.dropvalue(obj))(obj);
    }
    }
    ]
    }
    });
    
    .drop{
    宽度:400px;
    }
    
    简单文本属性(删除用于返回id的id):(正在工作)

    所选值:{OBJ.LOTTO1}


    简单文本属性(用于返回对象的放置id):(不工作)

    所选值:{{OBJ.LOTTO2}}


    函数文本属性:(不工作)

    所选值:{OBJ.LOTTO3}
    若要将选定的整个对象设置为模型,您必须修改
    getId()
    方法,以便在
    $scope.dropid
    未通过绑定时返回对象(因为此方法用于生成
    选项的值
    )。另外,我建议使用生成
    选项的列表
    元素。请参见下面的代码段:

    angular.module(“myApp”、['customDrop']).controller(“TestController”、['$scope',function($scope){
    变量项_选择={
    ID:3,
    价值:“价值3”
    };
    $scope.LIST=[{
    ID:1,
    值:“值1”
    },
    {
    ID:2,
    价值:“价值2”
    },
    所选项目,
    ];
    $scope.OBJ={
    乐透1:所选项目的ID,
    乐透2:选择的项目,
    乐透3:选择的项目
    };
    $scope.getCompleteValue=函数(obj){
    返回obj.ID+“-”+obj.VALUE;
    }
    }]);
    角度.module('customDrop',[])。指令('customDrop',函数(){
    返回{
    限制:'E',
    范围:{
    dropid:“@”,
    dropvalue:'&',
    
    列表:“由于您的问题,这里有很多问题-甚至不包括jquery,更喜欢组件,不使用额外的ngModel,不在模板中使用方法,更喜欢ng选项…最后-根本不要编写这样的组件-这将需要您的年龄才能使其可行。(即,在这个实现中,您不能将validator添加到字段)@Marcx很高兴它帮助了你:)