首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在angular1.x中继承控制器

在angular1.x中继承控制器
EN

Stack Overflow用户
提问于 2017-11-02 05:54:12
回答 1查看 45关注 0票数 0

对于angular1.6,我的情况是,不同的视图在60%左右的控制器逻辑是相同的。在这种情况下,如何将继承应用于控制器逻辑?我去了http://blog.mgechev.com/2013/12/18/inheritance-services-controllers-in-angularjs/http://jasonwatmore.com/post/2014/03/25/angularjs-a-better-way-to-implement-a-base-controller

并编写了一个在我的情况下应用的示例代码,但这是行不通的。

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title></title>
  <script type="text/javascript" src="https://unpkg.com/angular@1.6.6/angular.min.js">
  </script>
</head>
<body ng-app="test">

<div class="" ng-controller="Child1 as ctrl1">
  <input type="text" name="name" value="">
  <button type="button" name="button" ng-click="ctrl1.clickMethod()">ClickA</button>
</div>

<div class="" ng-controller="Child2 as ctrl2">
  <input type="text" name="name" value="">
  <button type="button" name="button" ng-click="ctrl2.clickMethod()">ClickB</button>
</div>

<script type="text/javascript">

  angular.module('test',[])
    .controller('Base', function(){

      var sharedMethod = function(arg) {
        console.log('shared method called with ' + arg);
      }
    })
    .controller('Child1', function($scope, $controller) {

      $controller('Base', { $scope : $scope});
      var ctrl1 = this;
      var clickMethod = function() {
        this.sharedMethod(41);
      };
    })
    .controller('Child2', function($scope, $controller) {

      $controller('Base', { $scope : $scope});
      var ctrl2 = this;
      var clickMethod = function() {
          this.sharedMethod(42);
      };
    })
</script>
</body>
</html>

sharedMethod是我想要与两个不同的视图共享的东西,有一个不同的控制器。

此外,在这个例子中,我已经创建了控制器(Base),它没有任何视图,它可以用角吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-02 06:14:50

在定义函数的方式上,代码中有一些错误,您需要进行以下更改:

代码语言:javascript
复制
 angular.module('test',[]).controller('Base', function($scope){

 $scope.sharedMethod = function(arg) {
    console.log('shared method called with ' + arg);
  }
})
.controller('Child1', function($scope, $controller) {

  $controller('Base', { $scope : $scope});
  var ctrl1 = this;
  ctrl1.clickMethod = function() {
    $scope.sharedMethod(41);
  };
})
.controller('Child2', function($scope, $controller) {

  $controller('Base', { $scope : $scope});
  var ctrl2 = this;
  ctrl2.clickMethod = function() {
      $scope.sharedMethod(42);
  }

});

你必须正确地调用函数才能让它正常工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47068490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档