2016-11-08 49 views
2

我有功能,开发人员可以添加自定义的Angular视图,他们可以将属性绑定到$ scope.settings对象。当点击保存按钮时,$ scope.settings对象将被转换为JSON并保存到数据库。这样的事情会是这个结果:如何在角度范围属性传递到指令时更新?

{ 
    "name": "bob", 
    "age": "25" 
} 

只要我添加元素,如<input type="text" ng-model="settings.name" />一切都如预期。

但是,现在我想补充的指令是这样的:

<umb-property property="property in properties"> 
    <umb-editor model="property"></umb-editor> 
</umb-property> 

用下面的代码:到位基础上的“视图”特性

$scope.properties = [ 
    { 
     label: 'Name', 
     alias: 'name', 
     view: 'textbox', 
     value: $scope.settings.name 
    }, 
    { 
     label: 'Age', 
     alias: 'age', 
     view: 'number', 
     value: $scope.settings.age 
    } 
]; 

的“编辑”指令负荷意见。意见是第三方。编辑器会在对话框中加载。提交设置对话框后,下面的代码行会的设置转换成JSON:

$scope.dialog = { 
    submit: function (model) { 
     var settingsJson = JSON.stringify(model.settings); 
    }, 
    close: function (oldModel) { 
     // 
    } 
}; 

在这种情况下,我无法分析$ scope.settings到JSON,因为$ scope.settings.name不更新了。 $ scope.editorModel.value被更新。

如何将$ scope.editorModel.value绑定到$ scope.settings.name? 我不想最终得到一个解决方案,我必须用编辑器模型中的相应值更新所有$ scope.settings值,因为我想支持将$ scope.settings转换为JSON值的动态方法在数据库中。

+0

可以告诉你,你有代码的一个更完整的例子?你描述你想要完成的事情的方式,你会有多个'editorModel'对象,每个'editor'对象都有一个。然而,你在这里展示的是试图为多个实例使用一个单独的'editorModel',这并不真正起作用。 – Claies

+0

我认为这可能是你做你的指示的方式,你可以把完整的指令代码吗? Tnx –

+0

我用更具体的例子提供了我的问题。 –

回答

0

例如,我不想做的事:$scope.settings.name = $scope.properties[0].value

使用property accessors

for (var i=0; i<$scope.properties.length; i++) { 
    $scope.settings[$scope.properties[i].alias] = $scope.properties[i].value; 
}; 

HTML

<div ng-repeat="prop in properties"> 
    <input ng-model="prop.value"> 
</div>