你总是要在Angular的控制器中继承服务变量吗?

时间:2016-11-30 13:13:41

标签: javascript html angularjs inheritance

我现在开始围绕Angular,我正在努力解决两件事:

第一个问题: 我有一个控制器'AboutCtrl',它使用服务'Abstract'中的变量。现在我要做的是在这个服务中设置一些基本变量,如:'mobileMenuOpen'。

现在我想要的是'AboutCtrl'使用'Abstract'中的值,现在我一直在搜索,我发现这样做:

constructor (private $scope: IAboutScope, $rootScope, Abstract) {
  console.log(Abstract);
  $scope.mobileMenuOpen = Abstract.mobileMenuOpen;
}

现在我想知道的是,有没有办法自动继承所有这些变量?

第二个问题: 有没有办法在view / index.html中显示“抽象”服务中的变量?

示例:在我的about视图中我想显示mobileMenuOpen的值,现在当我在AboutCtrl中继承变量时如上所示它可以工作,但是如何在没有继承的情况下执行此操作?

我已经做过一些关于最佳实践的研究,并且使用服务/工厂似乎是最佳实践,如果不是其他一些例子将不胜感激。

1 个答案:

答案 0 :(得分:1)

假设您的服务如下:

.service('abstract', function abstract(){
  this.mobileMenuOpen = false;
  this.someMethod = function(){
    //do the magic
    return 'cowabunga';
  };
})

如果您通过引用将服务分配给$ scope:

$scope.myAbstract = abstract 

然后,您的所有服务价值都会分配到myAbstract,并且也可以在模板中访问,也会被双向绑定

<p> Is the menu open: {{ myAbstract.mobileMenuOpen }} </p>
<p> {{ myAbstract.someMethod() }} was the ninja turtles war cry! </p>

分配如

$scope.mobileMenuOpen = abstract.mobileMenuOpen;

将按值分配,因此您稍后在服务中所做的任何更改都不会对$scope.mobileMenuOpen

产生任何影响