Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 定义一个控制器并使用两次_Angularjs_Angularjs Controller - Fatal编程技术网

Angularjs 定义一个控制器并使用两次

Angularjs 定义一个控制器并使用两次,angularjs,angularjs-controller,Angularjs,Angularjs Controller,我想为两个分开的div使用一个控制器,当我这样做时,它会发送两次$http请求 如何使用其他控制器的作用域? 这是我的密码: <div data-ng-controller="productCTRL"> <span ng-model="basket | count"></span> ....Some HTML Code...... </div>

我想为两个分开的div使用一个控制器,当我这样做时,它会发送两次$http请求 如何使用其他控制器的作用域? 这是我的密码:

            <div data-ng-controller="productCTRL">
                <span ng-model="basket | count"></span>
              ....Some HTML Code......
            </div>
            <div data-ng-controller="AuthController">
                   ....Some HTML Code...
            </div>
            <div data-ng-controller="productCTRL">
               <ul ng-repeat="product in products">
                  <li>{{product.title}}</li>
               </ul>
            </div>

…一些HTML代码。。。。。。
…一些HTML代码。。。
  • {{product.title}}

看起来您想访问其他控制器的作用域-

三种是沟通方式-

  • 父子继承作用域-您必须创建父控制器,并且子控制器可以使用父作用域进行通信。建议仅用于紧耦合控制器

  • 事件总线-订阅可以侦听事件($on),发布者可以使用$emit发布(当前到父作用域可以使用$on访问)或$brodcast发布(当前到子作用域可以使用$on访问)。同级控制器无法使用此方法共享数据。要在同级控制器之间共享数据,可以使用$rootScope.broadcast,包括同级控制器在内的所有作用域都将侦听此事件。它还使用事件进行耦合

  • 使用服务-两个控制器都可以使用公共服务共享数据,因为服务是单例的


  • 一种方法…

    您可以使用单片控制器:

    <div data-ng-controller="mainCTRL">
        <div data-ng-controller="productCTRL">
            <span ng-model="basket | count"></span>
            ....Some HTML Code......
        </div>
        <div data-ng-controller="AuthController">
            ....Some HTML Code...
        </div>
        <div data-ng-controller="productCTRL">
           <ul ng-repeat="product in products">
              <li>{{product.title}}</li>
           </ul>
        </div>
    </div>
    
    如果将工厂注入到
    productCTRL
    中,它将直接访问
    产品
    数据:

    appController("productCTRL", function(productService){
      $scope.products = productService.products;
    });
    

    控制器仍将实例化两次,但它只会重新分配
    $scope.products
    变量。最重要的是,它不再通过HTTP对您的API进行冗余调用。

    您的问题不清楚,您是否在某个事件上调用控制器的函数?我说得更清楚了,您仍然不清楚您在问什么。
    appController("productCTRL", function(productService){
      $scope.products = productService.products;
    });