在 AngularJS 中,Controller 是连接视图和模型的重要组成部分。在 SPA(单页应用)中,数据共享是必不可少的。而通过 Controller 间的通信,我们可以实现不同 Controller 之间的数据共享。
使用 $rootScope
$rootScope 是所有 AngularJS 应用中最顶层的作用域。在这个作用域中,我们可以定义全局变量和函数,并且这些变量和函数在所有 Controller 中都可以使用。
示例代码:
----------------------- --- -------------------- ---------------- ----------- - --------------------- - ------- -------- -- -------------------- ---------------- ----------- - ----------------- - ---------------------- ---
在上面的代码中,我们在 $rootScope 中定义了一个变量 sharedData,并在 Ctrl1 中对它进行了赋值。在 Ctrl2 中,我们通过 $scope.sharedData 将 sharedData 的值传递给了视图。
使用 Service
Service 是 AngularJS 中用于实现数据共享的另一个重要组成部分。通过定义一个 Service,我们可以在不同的 Controller 中共享数据。
示例代码:
----------------------- --- ------------------------- ---------- - --- ---------- - ------- -------- ------------ - ---------- - ------ ----------- -- ------------ - -------------- - ---------- - ----- -- -- -------------------- ---------------- -------------- - ----------------------------- ------------- -- -------------------- ---------------- -------------- - ----------------- - ------------------------ ---
在上面的代码中,我们定义了一个名为 sharedService 的 Service,并在其中定义了一个名为 sharedData 的变量。我们还定义了两个函数,分别用于获取和设置 sharedData 的值。在 Ctrl1 中,我们通过 sharedService.setData() 函数将 sharedData 的值设置为 'Hello, AngularJS!'。在 Ctrl2 中,我们通过 sharedService.getData() 函数获取 sharedData 的值并将其传递给视图。
使用 $broadcast 和 $on
$broadcast 和 $on 是 AngularJS 中用于实现事件传递的两个重要方法。通过使用 $broadcast 和 $on 方法,我们可以在不同的 Controller 之间传递数据。
示例代码:
----------------------- --- -------------------- ---------------- ----------- - ----------------------------------- ------- --------- -- -------------------- ---------------- ----------- - ---------------------------- --------------- ----- - ----------------- - ----- --- ---
在上面的代码中,我们在 Ctrl1 中使用 $broadcast 方法向所有的子作用域中广播一个名为 sharedData 的事件,并将数据 'Hello, World!' 作为参数传递给这个事件。在 Ctrl2 中,我们使用 $on 方法监听 sharedData 事件,并在事件触发时将数据传递给视图。
总结
通过使用 $rootScope、Service、$broadcast 和 $on,我们可以在 AngularJS 中实现 Controller 间的通信,从而实现数据共享。在实际开发中,我们可以根据具体的需求选择不同的方式来实现数据共享。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65ced752add4f0e0ff82f370