将范围变量从控制器绑定到指令而不使用$ watch

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将范围变量从控制器绑定到指令而不使用$ watch相关的知识,希望对你有一定的参考价值。

对于Angular 1,我有一个在控制器中进行的AJAX调用(因为它依赖于在路由解析期间返回的另一组数据),并且一旦响应返回,数据就会传递给指令。由于数据在编译指令之后才会返回,因此指令最初为从控制器传递的数据获取undefined,并且只有在我观察每个指令内的范围值时才会获取数据。有没有更好的方法,我不必使用$scope.$watch或任何事件监听器,如$broadcast/$on?我不想用太多的观察者来消耗消化周期。

这是一个模拟结构:

<parent>
  <directive1 data="manipulateDataReturnedFromAJAXCall"></directive1>
</parent>

//template for directive1
<div>
  <directive2 ng-if="data" attr1="data.field1"></directive2>
<div>
答案

怎么样在你的callback服务中使用http

//Controller
MyHTTPService.getData(function(data){
    $scope.manipulateDataReturnedFromAJAXCall = data;
})

//MyHTTPService service
return{
    getData : function(fct){
       $http.get("url/to/data").then(function(response){
           fct(response.data);
       })
    }
}

以上是关于将范围变量从控制器绑定到指令而不使用$ watch的主要内容,如果未能解决你的问题,请参考以下文章

如何使用范围变量将值从控制器获取到指令中

将 AngularJS 范围变量从指令传递到控制器的最简单方法?

iOS如何显示具有资产库路径的图像而不将它们绑定到实例变量

$watch'ing Angular 指令中的数据更改

来自控制器的访问指令方法

使用绑定和模板指令