AngularJs:带有Url参数的init指令模型

时间:2014-08-29 14:06:25

标签: angularjs angularjs-directive angularjs-scope

我有几个特定指令的实例:

<type="text" my-directive ng-model="formData.property1">
<type="text" my-directive ng-model="formData.property2">

formData.propery是一个像{ name: '', code: '' }这样的对象。 formData.propery.name用于视图层,formData.propery.code作为值发送到服务器。

我想从URL参数初始化这些指令 - 传递代码并将整个对象作为模型值。

这里的困难是:

  1. 我不能在指令范围内调用函数来从服务器获取具有特定代码的对象,因为它违反了父范围和指令范围的关注点分离。

  2. 由于$ http请求的异步调用类型,我无法从父作用域初始化模型。

  3. 我不能在指令中使用特定的init函数,它通过模型变量名从服务器获取对象,因为它有点尴尬并且使代码混乱。

  4. 那么这样做的正确方法是什么?

    示例1:

        getObj1 = (code)->
            $http({
                url: '/api/service/GetByCode'
                method: 'POST'
                data: { code: code }
                headers: {'Content-Type': 'application/json; charset=utf-8'}
            })
            .success((data)->
                $scope.formData.property1 = angular.fromJson(data.result)
            )
    
        getObj2 = (code)->
            $http({
                url: '/api/service/GetByCode'
                method: 'POST'
                data: { code: code }
                headers: {'Content-Type': 'application/json; charset=utf-8'}
            })
            .success((data)->
                $scope.formData.property2 = angular.fromJson(data.result)
            )
    

1 个答案:

答案 0 :(得分:0)

好吧,我只需要传递属性以使用闭包作为参数赋值:

   getObj = (code, prop)->
        theProp = prop
        $http({
            url: '/api/service/GetByCode'
            method: 'POST'
            data: { code: code }
            headers: {'Content-Type': 'application/json; charset=utf-8'}
        })
        .success((data)->
            theProp = angular.fromJson(data.result)
        )

然后像这样调用它:

getObj(someCode1, scope.formData.property1)
getObj(someCode2, scope.formData.property2)