javascript - 如何封装跨多个 Controller 设置 $scope 值?

标签 javascript angularjs encapsulation

这是我的第一个 Angular 项目,我有多个页面,其中的 View 代码如下所示:

<!-- in myapp.com/kitties -->
<tr ng-repeat="row in kitties">
    <td>{{row.fuzziness}}</td>
    <td>{{row.meowLevels}}</td>
    <td>{{row.evilness}}</td>
    <td>{{row.redDotProgress}}</td>
</tr>

<!-- in myapp.com/princesses -->
<tr ng-repeat="row in princesses">
    <td>{{row.magic}}</td>
    <td>{{row.woodlandCreatureCount}}</td>
</tr>

<!-- in myapp.com/fairies-->
<tr ng-repeat="row in fairies">
    <td>{{row.friendship}}</td>
    <td>{{row.mischief}}</td>
    <td>{{row.wingColour}}</td>
</tr>

我试图封装检查后端 API 的表数据、检查表数据的本地存储,然后将该数据放入 $scope.kitties、$scope.princesses 或 $scope.fairies 的行为。每个页面都有自己的 Controller ,我不想将重复的代码放入每个页面的 Controller 中。我可以把这个封装的代码放在哪里?我尝试了一项服务,但无法从该服务访问 $scope。我认为指令不起作用,因为我只想在 $scope 中设置一个值。

最佳答案

1. 服务是实现此目的的好方法之一,但您不需要从中访问 $scope。请看下面这个示例:

app.factory('generalService', function($timeout,$http,$q,$location){

  var kitties= getYourKittiesFunction();

  var service={
     kitties:kitties
  };
  return service;
});


app.controller('yourController', function($scope,generalService{
  // you have generalService.kitties now
})

因此,我声明了一个服务,我在其中获取数据并将该服务作为对 Controller 的引用发送,我可以通过调用 .custom-property 来使用它

2. 另一种方法是在您的母版页中添加一个mainController。在那里声明您想要的所有内容,并且它对于应用程序中的每个子 Controller 都是可见的(因为继承)

示例:

<div ng-controller="parentController">
    <h1>{{text}}</h1>
    <div ng-controller="childController">
        <h1>{{text}}</h1>
    </div>
</div>

app.controller("parentController", [ '$scope', function($scope){
    $scope.text= "Hello world";
 }]);

app.controller("childController", [ '$scope', function($scope){
    // $scope.text is visible from parentController
}]);
<小时/>

更新: 我想我第一次读它的时候不太理解,你真正想要的是将你的 View 代码封装成一些东西来跨多个页面共享

为此,请按照以下步骤操作:

a.为此,创建一个名为 magicalListController 的 Controller ,您可以在其中放置代码来填充数组(小猫、仙女和公主)

b.将该 html 代码放在单独的 View 中

c.将其包含在您的页面中

示例:

app.controller('magicalListController', function($scope){
  $scope.kitties=// get your kitties
  $scope.fairies= // get your fairies
  $scope.princesses= // get your princesses
});

   // View code it's exactly how you posted in 

并插入到另一个 View

 <div ng-include="'path to your view'" ng-controller="magicalListController"></div>

关于javascript - 如何封装跨多个 Controller 设置 $scope 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29164223/

相关文章:

javascript - v-for 的每个项目的组件

javascript - 类型错误 : Cannot read property 'rows' of undefined

javascript - Angular 变量未在前端更新

angularjs - 路由原因超出最大调用堆栈大小

c++ - 在父类中公开 protected 构造函数

java - Clojure 和 Java 之间的界限在哪里?

javascript - 使用nodejs fs 模块将路径添加到文件名中?

javascript - 如何从javascript中的子类调用父方法?

javascript - 将数组从 ng-repeat 项传递给指令

java - 我是否总是需要克隆一个对象以确保 Java 中的封装?