$ http请求后加载控制器

时间:2014-03-14 10:47:02

标签: ajax angularjs controller

我正在使用这样的$ http请求:

$http({   
    method: 'POST', 
    url: url,
    data : {'some':'data'},
}).
success(function(data, status, headers, config) {
     container.css({    opacity : '0.0' }).html(  data  ).delay(50).animate({   opacity : '1.0' }, 300);
})

$ http响应的开头如下: <div class="tree" ng-controller="systemDataTree"><ul><li> 一切都按照应有的方式加载,我不想使用路线。 正在加载的内容中将包含ng-controller="myController",但在加载后不会执行。

如何让它执行加载HTML响应的控制器? 我不想在$http.success内部执行控制器,因为会使用许多不同的控制器

2 个答案:

答案 0 :(得分:0)

如果错误,请纠正我:你想在响应来自网络服务后运行第二个控制器吗?正确的吗?

为此您可以将模板移动到ng-template

<script type="text/ng-template" id="innerTemplate">
   <div ng-controller="myFirstCtrl">
</div>

</script>

在主视图中,您可以拥有这样的

<div ng-controller="controllerWhichCallsHttp">
 your html here

 <div ng-include="variable"></div>
</div>

controllerWhichCallsHttp将具有以下$ http

$http({   
method: 'POST', 
url: url,
data : {'some':'data'},

}).success(function(data, status, headers, config) {

 $scope.variable="innerTemplate";  //i.e. after you get the response set the value of the variable with the id of the template and then myFirstCtrl will execute
 container.css({    opacity : '0.0' }).html(  data  ).delay(50).animate({   opacity :    '1.0' }, 300);
})

答案 1 :(得分:0)

DONE ::

这是解决方案:

success(function(data, status, headers, config) {
     container.css({    opacity : '0.0' }).html(  data  ).delay(50).animate({   opacity : '1.0' }, 300);
})

而不是附加纯data使用$compile(data)($scope),您可以在里面添加任意数量的控制器。 像这样你可以自定义加载你的东西并使用你想要的控制器