如何在Angular中组合多个范围模型?

时间:2014-12-15 16:45:50

标签: angularjs angularjs-scope

我有

    $scope.formTitle = '';
    $scope.formDesc = '';
    $scope.fields = [];

但是想将这些组合成一个$scope.theForm,这样我就可以拥有一个可以轻松转换为JSON的对象。

最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

没有什么能阻止您在包装类中托管您的媒体资源。它实际上是一种推荐的方法,用于目的相似的属性(例如表单属性)。

// create wrapping class
$scope.theForm = {};

// add properties to the class
$scope.theForm.formTitle = '';
$scope.theForm.formDesc = '';
$scope.theForm.fields = [];

或者您可以在同一语句中声明属性,就像这样

$scope.theForm = {
    title: '',
    desc: '',
    fields: []
}

HTML 以及其他任何地方,您只需使用包装类名称作为前缀theForm.formTitle访问这些属性ng-repeat="field in theForm.fields"等等。

答案 1 :(得分:1)

$scope.theForm = {
    title: '',
    desc: '',
    fields: []
}

答案 2 :(得分:0)

我认为你想要的是这样的:

$scope.theForm = {
    formTitle: '',
    formDesc: '',
    fields: []
}

您可以代替theForm,而不是datamodeldataModel

但是如果您是从JSON对象获取它,则不需要在范围上具体定义。在这个例子中,我也不会使用$scope。我将使用resolve对象来获取JSON对象;

MyController.resolve = {
    'myDataObject': ['myService', function(myservice] {
         return myService.getMyDataObjectPromise();
     }]
}
MyController.$inject = ['myDataObject'];
function MyController(myJsonObject) {

   this.data = myJsonObject;

}

在您的uiRouter或ngRouter中,您将此控制器的resolve对象指向MyController.resolve。此示例您将使用controllerAs语法。因此,对于controller: 'MyController as vs',视图将使用vm.data访问数据。