【问题标题】:Do you always have to inherit service variable in controller in Angular?您是否总是必须在 Angular 的控制器中继承服务变量?
【发布时间】:2016-11-30 13:13:40
【问题描述】:

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

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

现在我想要的是“AboutCtrl”使用“Abstract”中的值,现在我一直在四处寻找,我发现了这种方法:

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

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

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

示例: 在我的 about 视图中,我想显示 mobileMenuOpen 的值,现在当我在 AboutCtrl 中继承变量时,如上所示,它可以工作,但是如果没有继承,我怎么能做到这一点?

我已经对最佳实践进行了一些研究,使用服务/工厂似乎是最佳实践,如果不是其他示例,将不胜感激。

【问题讨论】:

  • $scope.myAbstract = Abstract 然后你的服务的所有值将被分配给myAbstract 并且在模板中,你可以使用{{ myAbstract.mobilemenuOpen }} 甚至ng-click="myAbstract.mobilemenuOpen = !myAbstract.mobilemenuOpen" 来切换菜单
  • 非常感谢!没有继承来显示变量怎么样?如果你写一个答案,我会接受!

标签: javascript html angularjs inheritance


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2011-12-30
    • 2021-06-14
    相关资源
    最近更新 更多