2016-03-28 64 views
0

我在JSON中擁有非常分層的數據結構。我也有一個可重用的(Django)模板,它被綁定到該結構的一部分。所以,我需要知道在任何給定的模板中我在哪個結構中。我幾乎有:如何將ng-model傳遞給控制器​​

http://jsfiddle.net/trubliphone/fd64rn3y/

的缺失位是能夠在當前NG-模型傳遞給控制器​​。

下面是一些代碼(但高於的jsfiddle示出更詳細地):

my_app.js:

var myApp = angular.module('myApp', []); 

myApp.factory('$global_services', ['$http', function($http) { 
    var data = {}; 
    $http.get("some_url", {format: "json"}) { 
    /* THIS REQUEST RETURNS A BIG CHUNK OF HIERARCHICAL JSON */ 
    .success(function (data) {   
     data = data; 
    }) 
    }); 

    return { 
    getPathFromModel: a_clever_fn_i_wrote_that_returns_a_string(), 
    getModelFromPath: a_clever_fn_i_wrote_that_returns_a_model() 
    } 

}]); 

myApp.controller('MyController', ['$scope', '$attrs', '$global_services', function($scope, $attrs, $global_services) { 

    if ($attrs.currentModelPath) { 
    /* if you passed current_model_path, get the current_model too */ 
    $scope.current_model_path = $attrs.currentModelPath; 
    $scope.current_model = $global_services.getModelFromPath($scope.current_model_path); 
    } 
    else if ($attrs.currentModel) { 
    /* if you passed current_model, get the current_model_path too */ 
    $scope.current_model = $attrs.currentModel; 
    $scope.current_model_path = $global_services.getPathFromModel($scope.current_model); 
    } 
}]); 

my_template.html:

<div ng-app="myApp"> 
    <div ng-controller="MyController" current_model_path="data"> 
    {{current_model.name}}: 
    <ul ng-repeat="child in current_model.children"> 
     <input type="text" ng-model="child.name"/> {{ child.name }}   
     <!-- LOOK: HERE IS A NESTED CONTROLLER --> 
     <div ng-controller="MyController" current_model="child">  
      {{current_model.name}}: 
      <ul ng-repeat="child in current_model.children"> 
      <input type="text" ng-model="child.name"/> {{ child.name }} 
      </ul> 
     </div> 
    </ul> 
    </div>  
</div> 

的問題是在嵌套控制器的「div」元素;我將 ng變量作爲屬性傳遞,但是當控制器收到它時,它只是將其解釋爲JavaScript字符串「child」。我怎樣才能傳遞實際的模型對象?

謝謝。

回答

2
<div ng-controller="MyController" ng-init="data = child"> 

這會將一個對象添加到名爲data的內部作用域。

+0

謝謝。這似乎工作。但是,我認爲使用ng-init在ng-repeat之外被忽視了? – trubliphone

+0

這些日子裏一切都皺起了眉頭只是明智地使用 – racamp101

+0

想要標記這個答案? – racamp101