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

时间:2013-01-22 10:24:55

标签: angularjs

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

{
      "type": "object",
      "properties": {
          "myFirstProperty": {
              "type": "integer"
          }
      },
      "title": "MySchema",
      "description": "some description"
    }
  

请在此处查看预览http://jsfiddle.net/franquis/djRFN/4/embedded/result/

     

请在此处查看代码http://jsfiddle.net/franquis/djRFN/4/

使用简单表单,我可以使用“ ng-model ”属性定义“名称”,“ description ”,但当谈到我的架构的“ properties ”定义时,我遇到了一些麻烦:)

我做的是:

  1. 首先创建了一个“ $ scope.newProperties ”数组,该数组存储了我想添加到模式“ $ scope.schema
  2. 的属性。
  3. 在此阵列上添加了一个侦听器,以便为我的“ $ scope.schema.properties ”添加新属性
  4. 我的问题:

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

    {
          "type": "object",
          "properties": {
             "h": {},
             "ho": {},
             "hos": {},
             "host": {},
             "hostn": {},
             "hostna": {},
             "hostnam": {},
             "hostname": {
                "type": "integer"
             }
          },
          "title": "MySchema",
          "description": "some description"
        }
    

    我知道这种行为是由“ $ watch(”myva“,函数(a,b){},true); ”函数引起的,但我还能尝试成功吗?

    感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

在迭代项目之前重置$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

同步的最佳方式