【问题标题】:Angular js inherit properties of one controller form another controllerAngularjs 从另一个控制器继承一个控制器的属性
【发布时间】:2015-01-25 20:35:09
【问题描述】:

我是 Angular 的初学者。帮我编写这段代码。

如何将callme控制器的name属性继承给mee控制器? 我不知道如何在这段代码中使用广播...

<script type="text/javascript">
    function callme($scope)
    {
        $scope.name="anand";
    }
    function mee($scope)
    {
        $scope.age="34";
    }
</script>
<div ng-controller="callme">
    <p>Name: <input type="text" ng-model="name"></p>
    hello {{name}}!
</div>
<div ng-controller="mee">
    <p>age:<input type="text" ng-model="age"></p>
    hello {{name}} {{age}}!!!
</div>

【问题讨论】:

  • 只需将&lt;div ng-controller="mee"&gt; 放入&lt;div ng-controller="callme"&gt;。另请参阅有关Scope Hierarchies的指南

标签: javascript html css angularjs angularjs-scope


【解决方案1】:

因此您可以使用控制器继承,但这意味着一个控制器需要位于另一个控制器内部。这不是您在示例 HTML 中所做的。

不过,所有控制器共享 1 个 rootScope,因此您可以沿着从 rootscope 到所有控制器广播事件的道路。

这是小提琴:http://jsfiddle.net/qabpfbug/2/

var myApp = angular.module('myApp',[]);

myApp.controller('callme', [ '$scope', '$rootScope', function($scope, $rootScope) {
    $scope.name = 'John Doe'; 
    $scope.$watch('name', function(newValue, oldValue) {
        $rootScope.$broadcast('nameChanged', newValue);
    });

}]).controller('mee', [ '$scope', function($scope) {
    $scope.$on('nameChanged', function(event, value) {
        $scope.name = value;
    });
}]);

让我指出几点:

  • 以这种方式使用控制器的符号可以使您的代码最小化(丑化任何您想要的名称)。该数组包含依赖项的名称,然后将其注入到控制器函数中。
  • 首先我们$watch $scope.name 对象。 AngularJS 将检查这个对象的变化值,并在它发生变化时调用该函数。在这个函数中,我们向上到 $rootScope 并使用新值调用 $broadcast。所以这与 $emit 不同
  • 在 'mee' 控制器上 - 我们正在监听 'nameChanged' 事件并使用提供的值来更新该控制器内的 $scope.name 对象。

【讨论】:

    【解决方案2】:

    这是工作小提琴http://jsfiddle.net/qabpfbug/1/

    您可以使用 $rootScope,但我建议您使用服务来共享数据 b/w 控制器。

     function callme($rootScope)
        {
            $rootScope.name="anand";
        }
        function mee($scope)
        {
            $scope.age="34";
        }
    

    【讨论】:

    • 但是在“mee”控制器中访问时name的值不是动态添加的..
    • 你需要 $watch 看看它。
    猜你喜欢
    • 2013-08-29
    • 2016-07-18
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2013-03-01
    • 2022-08-23
    • 2015-09-07
    相关资源
    最近更新 更多