Javascript 如何将ng模型传递给控制器

Javascript 如何将ng模型传递给控制器,javascript,angularjs,Javascript,Angularjs,我有一个非常分层的JSON数据结构。我还有一个可重用(Django)模板,它绑定到该结构的一部分。所以,我需要知道对于任何给定的模板,我在结构中的位置。我快到了: 缺少的位能够将当前ng模型传递给控制器 下面是一些代码(但上面的JSFIDLE显示了更多细节): my_app.js: var myApp = angular.module('myApp', []); myApp.factory('$global_services', ['$http', function($http) { v

我有一个非常分层的JSON数据结构。我还有一个可重用(Django)模板,它绑定到该结构的一部分。所以,我需要知道对于任何给定的模板,我在结构中的位置。我快到了:

缺少的位能够将当前ng模型传递给控制器

下面是一些代码(但上面的JSFIDLE显示了更多细节):

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>

{{current_model.name}}:
    {{child.name} {{current_model.name}}:
      {{child.name}
问题出在嵌套控制器的“div”元素中;我将
{{child}}
ng变量作为属性传递,但当控制器接收到它时,它只是将其解释为JavaScript字符串“child”。如何传递实际的模型对象

谢谢。


  <div ng-controller="MyController" ng-init="data = child">
这将向名为data的内部作用域添加一个对象。



这将向名为data的内部作用域添加一个对象。

谢谢。这似乎奏效了。然而,我认为使用ng init在ng repeat之外是不受欢迎的?现在一切都是不受欢迎的,请明智地使用谢谢。这似乎奏效了。然而,我认为使用ng init在ng repeat之外是不受欢迎的?现在一切都是不受欢迎的,只要明智地使用就好了