多个控制器的数据共享的两种方法

Angular 中的控制器数据共享策略
本文探讨了在Angular应用程序中实现多个控制器间数据共享的两种有效方法:使用服务(Service)和注入根作用域($rootScope)。通过创建自定义服务,可以实现更灵活且可测试的数据共享;而注入根作用域则提供了一种简单但可能导致意外副作用的共享方式。理解这两种方法的优缺点对于优化Angular应用的架构至关重要。


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
    </head>
    <body>
        <div ng-app="myApp">
            <div ng-controller="firstController">
                <!--ng-model="data.name"表示此表单的输入值与data.name双向绑定-->
                <input type="text" ng-model="data.name">
                <p>
                    first:{{data.name}}
                </p>
            </div>
            <div ng-controller="secondController">
                <p>
                    second:{{thisData.name}}
                </p>
            </div>
            <hr/>

            <div ng-controller="onecontroller">
                <input type="text" ng-model="data.name">
                <p>one:{{data.name}}</p>
            </div>

            <div ng-controller="twocontroller">
                <p>two:{{data.name}}</data></p>
            </div>
        </div>
        <script>

            /*
            *解决方法1
            */
            var app=angular.module("myApp",[]);
            app.controller("firstController",function($scope){
                console.log($scope);
                //创建data对象
                $scope.data={
                    name:"张三"
                };
            });
            app.controller("secondController",function($scope){
                console.log($scope);
                //此命名空间的data等于上一个兄弟的data对象,即指针指向了firstcontroller控制器的data,
                //所以当firstcontroller的data对象的属性发生变化时,因为angular是双向绑定的,所以此控制器的data对象也会发生改变
                //如果是基本变量,
                //虽然firstController的data赋值给了此控制器data,但当data值改变时,不会触发此控制器脏指令
                $scope.thisData=$scope.$$prevSibling.data;
            });
            /*
            *解决方法2
            */
            app.factory("Data",function(){
                return{
                    name:"李四"
                };
            });
            app.controller('onecontroller',function($scope,Data){
                $scope.data=Data;

            });
            app.controller('twocontroller',function($scope,Data){
                $scope.data=Data;
            });
        </script>
    </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值