我可能是错的,但我的印象是我可以访问我的服务并让它直接显示数据。
即我可以注入我的服务并从多个组件对它进行读/写访问, 这很容易做到,但是如果我想显示服务数据,我需要将其复制到控制器以让 $scope/vm/this 然后将其挂接到 HTML 模板中。 但这意味着在 DOM 级别发生的任何更改, 需要监视/触发以告诉服务它已更改,我希望这是自动的。
我本质上是在努力节省时间,询问是否可以完成,我一直很好奇,以前有没有人设置过它并让它工作?你能好心
,您可以像往常一样创建服务,但然后将其分配给$rootScope
属性(例如service
(run
方法,因此您可以通过模板中的service.name
或service.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>