如何使用AngularJS模型定义*对象键*?

如何使用AngularJS模型定义*对象键*?,angularjs,Angularjs,我想构建一个快速工具来定义一个“”如下所示: { "type": "object", "properties": { "myFirstProperty": { "type": "integer" } }, "title": "MySchema", "description": "some description" } 请参见此处的预览: 请参见此处的代码: 使

我想构建一个快速工具来定义一个“”如下所示:

{
      "type": "object",
      "properties": {
          "myFirstProperty": {
              "type": "integer"
          }
      },
      "title": "MySchema",
      "description": "some description"
    }
请参见此处的预览:

请参见此处的代码:

使用一个简单的表单,我可以使用“ng model”属性定义“name”、“description”,但是当涉及到我的模式的“properties”定义时,我遇到了一些麻烦:)

我所做的是:

  • 首先创建了一个“$scope.newProperties”数组,该数组存储我要添加到架构中的属性“$scope.schema
  • 在此数组上添加了侦听器,以便将新属性添加到我的“$scope.schema.properties
  • 我的问题:

    当我创建一个新属性时,当我键入新密钥的名称(即主机名)时,它会创建许多新属性。。。 见下文:

    {
          "type": "object",
          "properties": {
             "h": {},
             "ho": {},
             "hos": {},
             "host": {},
             "hostn": {},
             "hostna": {},
             "hostnam": {},
             "hostname": {
                "type": "integer"
             }
          },
          "title": "MySchema",
          "description": "some description"
        }
    
    我知道这种行为是由“$watch”(“myva”,function(a,b){},true);”函数引起的,但是我还可以尝试成功什么呢


    谢谢你的帮助

    在迭代项之前重置
    $scope.schema.properties

    $scope.$watch(function(){return $scope.newProperties;},function(items,b){
        $scope.newSchema.properties = {};
        angular.forEach(items, function(obj){
            if(angular.isDefined(obj.key)) {
                var key = obj.key, type = obj.type, name = obj.name;
                $scope.newSchema.properties[key] = {
                    "name": name,
                    "type": type
                };
            }
        });
    },true);
    

    这是保持
    $scope.schema
    有序并与
    $scope.newProperties

    同步的最佳方法,请在迭代项目之前重置
    $scope.schema.properties

    $scope.$watch(function(){return $scope.newProperties;},function(items,b){
        $scope.newSchema.properties = {};
        angular.forEach(items, function(obj){
            if(angular.isDefined(obj.key)) {
                var key = obj.key, type = obj.type, name = obj.name;
                $scope.newSchema.properties[key] = {
                    "name": name,
                    "type": type
                };
            }
        });
    },true);
    

    这是保持
    $scope.schema
    有序并与
    $scope.newProperties

    同步的最佳方法,但是为什么需要
    newProperties
    ?为什么不直接绑定到
    $scope.schema.properties
    并编辑它们呢?如果包含一些其他属性(如默认集),则可以通过不在该默认集中而拥有默认集和过滤器属性。但总的来说,我认为绑定到结果模型要容易得多。我不认为我可以将输入绑定到对象的属性名,对吗?如果我错了,你有什么例子吗?但是为什么你需要
    新属性
    ?为什么不直接绑定到
    $scope.schema.properties
    并编辑它们呢?如果包含一些其他属性(如默认集),则可以通过不在该默认集中而拥有默认集和过滤器属性。但总的来说,我认为绑定到结果模型要容易得多。我不认为我可以将输入绑定到对象的属性名,对吗?如果我错了,请举个例子好吗?