我是否可以创建直接插入控制器或组件的服务



我可能是错的,但我的印象是我可以访问我的服务并让它直接显示数据。

即我可以注入我的服务并从多个组件对它进行读/写访问, 这很容易做到,但是如果我想显示服务数据,我需要将其复制到控制器以让 $scope/vm/this 然后将其挂接到 HTML 模板中。 但这意味着在 DOM 级别发生的任何更改, 需要监视/触发以告诉服务它已更改,我希望这是自动的。

我本质上是在努力节省时间,询问是否可以完成,我一直很好奇,以前有没有人设置过它并让它工作?你能好心

地详细说明吗?
在这种情况下

,您可以像往常一样创建服务,但然后将其分配给$rootScope属性(例如service (run方法,因此您可以通过模板中的service.nameservice.test文字不受限制地使用它,因为所有$scope都是从$rootScope继承的。此外,您不需要将服务注入到您的特定控制器,您可以通过模板立即使用它:

var app = angular.module('app', []);
app.factory('myservice', function(){  
  return {
    test: function(){
      console.log(this.name);
    },
    name: 'Tom'
  };
}).controller('ctrl', function($scope, myservice){  
  $scope.local = 'from local ctrl';  
  $scope.serviceName = function(){
    return myservice.name;
  }
})
app.run(function(myservice, $rootScope){
  $rootScope.service = myservice;
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='app' ng-controller='ctrl'>
  <input type='text' ng-model='service.name'/> 
  {{serviceName()}}
  <br>
  <input type='button' ng-click='service.test()' value='service.test'/>  
  <br>
  <br>
  <input type='text' ng-model='local'/>  
<div>

最新更新