一尘不染

如何在多个控制器中重用功能

angularjs

我有多个路线的多个控制器:

app.controller('FirstController', function ($scope) {
  $scope.func = function () {
    console.log('route 1');
  }
}
app.controller('SecondController', function ($scope) {
  $scope.func = function () {
    console.log('route 2');
  }
}
...

和使用的伪指令,通过$scope.func这种方式:

app.directive('thedirective', function () {
  return {
    link: function (scope, $element, attrs) {
      $scope.func(attrs.thedirective);
    }
  }
});

$scope.func每个控制器都不同。我希望$ scope.func在route1中时会记录“ route
1”,而FirstController是当前控制器,而在Route 2中时会记录“ route 2”,但在控制台中只有“ rout
1”。您能否告诉我为什么更改路径不会更改$ scope指令?


阅读 223

收藏
2020-07-04

共1个答案

一尘不染

孤立范围 是我用来重用一个函数的方法,该函数的定义不同是多个控制器。
根据文档,当您隔离指令的范围时,例如:

scope: {
  myIsolatedFunc: '='
}

Angular将查找当前范围以获取一个名为myIsolatedFuncelement 的属性值的属性。意思是:

如果您有一个名为的函数$scope.func1和一个定义为的元素:

<div myIsolatedFunc="func1">

在与另一个控制器一起的另 一条路线中 ,类似的功能$scope.func2以及定义为的元素:

<div myIsolatedFunc="func2">

您可以在指令中使用这两个功能:

app.directive('thedirective', function () {
  return {
    scope: {
      myIsolatedFunc: '='
    },
    link: function (scope, $element, attrs) {
      $scope.myIsolatedFunc(attrs.thedirective);
    }
  }
});

更不用说对于不同的功能,不必使用不同的名称。

2020-07-04