javascript - AngularJS 将对象从主 Controller 传递到其他 Controller

标签 javascript angularjs

我是 Angularjs 和 Ionic 的新手。我目前正在构建我的第一个应用程序,我想知道,有什么方法可以在主 Controller 中注入(inject)表达式并在所有其他 Controller 中使用它们。

因此,不要在每个 Controller 中键入 $scope、$http、$Ionicpopup。我想将其放入我的主 Controller 中,并在所有其他 Controller 中使用它们。

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

你能告诉我这个叫什么吗?

最佳答案

我们通常使用服务在 Controller 之间进行通信。

在下面的示例中,我们创建animalService,并将其注入(inject)到两个 Controller 中。然后我们使用$watch来监控变化。

http://plnkr.co/edit/hfKuxJO2XZdB6MsK7Ief

(function () {

    angular.module("root", [])
      .controller("leftAnimal", ["$scope", "animalService",
        function ($scope, animalService) {

            $scope.findNewAnimal = function () {
                var randNum = Math.floor(Math.random() * animalPool.length);
                $scope.animal = animalPool[randNum];
                console.log("Left Click Index: " + randNum);
                animalService.setAnimal(randNum);
            };

            $scope.$watch(function () {
                return animalService.getAnimal();
            }, function (value) {
                $scope.animal = animalPool[value];
            });
        }
      ])
      .controller("rightAnimal", ["$scope", "animalService",
        function ($scope, animalService) {

            $scope.findNewAnimal = function () {
                var randNum = Math.floor(Math.random() * animalPool.length);
                $scope.animal = animalPool[randNum];
                console.log("Right Click Index: " + randNum);
                animalService.setAnimal(randNum);
            };

            $scope.$watch(function () {
                return animalService.getAnimal();
            }, function (value) {
                $scope.animal = animalPool[value];
            });
        }
      ])
      .factory("animalService", [function () {
          var index = 0;
          function getAnimal() {
              return index;
          }
          function setAnimal(newIndex) {
              index = newIndex;
          }
          return {
              getAnimal: getAnimal,
              setAnimal: setAnimal,
          }
      }]);

    var animalPool = [{
        name: "Baby Quetzal",
        img: "http://i.imgur.com/CtnEDpM.jpg",
        baby: true
    }, {
        name: "Baby Otter",
        img: "http://i.imgur.com/1IShHRT.jpg",
        baby: true
    }, {
        name: "Baby Octopus",
        img: "http://i.imgur.com/kzarlKW.jpg",
        baby: true
    }];
})();
<!DOCTYPE html>
<html ng-app="root">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <link data-require="bootstrap-css@3.3.6" data-semver="3.3.6" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" />
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.9/angular.js" data-semver="1.4.9"></script>
    <script src="app.js"></script>
  </head>

  <body>
     <div class="row">
        <div class="text-center">
            <h2>Pick an Animal</h2>
        </div>
        <div ng-controller="leftAnimal" class="col-md-6">
            <div class="animalImage">
                <img class="img-center" ng-src="{{animal.img}}"/>
            </div>
            <div class="animalName">{{animal.name}}</div>
            <div class="animalDescription">{{animal.description}}</div>
            <button type="button" ng-click="findNewAnimal()"
                    class="btn btn-info img-center">
                Change
            </button>
        </div>
        <div ng-controller="rightAnimal" class="col-md-6">
            <div class="animalImage">
                <img class="img-center" ng-src="{{animal.img}}" />
            </div>
            <div class="animalName">{{animal.name}}</div>
            <div class="animalDescription">{{animal.description}}</div>
            <button type="button" ng-click="findNewAnimal()"
                    class="btn btn-info img-center">
                Change
            </button>
        </div>
    </div>
  </body>

</html>

关于javascript - AngularJS 将对象从主 Controller 传递到其他 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38517361/

相关文章:

javascript - 菜单的 CSS 正文切换器

javascript - AngularJs ng-repeat 无法正常工作

javascript - <base> 标签破坏了 SVG 标记端渲染

javascript - 在 Jasmine 测试中为 Angular Constant 提供动态值

javascript - 从 Angularjs 中的 View 触发模型更新

javascript - Jasmine 测试中 Controller 未定义

javascript - 问题将 MVC 中的模型对象获取到 jQuery 变量

javascript - AngularJS:CSS 类、ng-repeat、搜索框

javascript - 奥里利亚导航管道

javascript - 尝试使用 Jest 和 Enzyme 对 React 组件进行单元测试