AngularJS-将值从隔离范围指令传递到另一个元素

AngularJS-将值从隔离范围指令传递到另一个元素,angularjs,isolated-scope,Angularjs,Isolated Scope,在登录操作期间加载数据时,是否有方法将布尔值dataLoading从隔离范围指令传递到另一个元素以显示进度条 index.html login.controller.js 您可以使用EventEmitter向控制器发送数据 EventEmitter({loading: true }) 在组件上添加绑定以捕获更改: onDataChanges: '&' 您可以在component controller上捕获数据: callbackdata(data) { this.loadin

在登录操作期间加载数据时,是否有方法将布尔值dataLoading从隔离范围指令传递到另一个元素以显示进度条

index.html

login.controller.js


您可以使用EventEmitter向控制器发送数据

EventEmitter({loading: true })
在组件上添加绑定以捕获更改:

onDataChanges: '&'
您可以在component controller上捕获数据:

callbackdata(data) {
    this.loading= data.loading;
}
你的看法是:

<login ... onDataChanges="callbackdata($event)" ...></login>

是的,绝对是。您可以创建一个公开say“loading”属性的服务,然后将该服务注入控制器和指令。在指令中设置服务的“加载”属性。这就是你的指示。 现在,将您注入指令的服务注入元素的控制器。因此,如果该服务被称为myloadingservice,您将执行类似$scope.myloadingservice=myloadingservice的操作。一旦有了这些,就可以直接绑定到元素中服务的loading属性,如下所示:ng show=myloadingservice.loading


希望这能有所帮助。

通常,让数据朝一个方向流动是一种更好的做法。 因此,dataLoading变量的所有者应该是这两个组件的公共父级

如果该布尔值的逻辑应该在用户登录组件内部,您可以通过&向其传递回调,然后用户登录组件将在开始获取数据时调用它,然后父级将更改该布尔值,并将其传播到相关子级

常数app=角度。模块'app',[]; 应用程序指令'parentComponent',函数{ 返回{ controllerAs:“parentVM”, 控制器:功能{ this.isLoading=false; this.onLogin==>{ this.isLoading=true; } }, 模板: }; } .指令'otherChild',函数{ 返回{ 范围:{ localLoading:'=isLoading' }, 模板:“{localLoading?\'Loading…\”:\'\'\'}” } } .指令'child',函数{ 返回{ 范围:{ onLogin:“&” }, 模板:“登录” }; } .正在装货{ 背景色:rgba0,200,0,0.2; }
那怎么办?不要那样做。组件不应该注入所有内容。它应该是独立的。大部分可重复使用
onDataChanges: '&'
callbackdata(data) {
    this.loading= data.loading;
}
<login ... onDataChanges="callbackdata($event)" ...></login>