angular.injector(..).invoke 在控制台中不返回单例

Gil*_*man 0 javascript singleton coffeescript angularjs

剧本:

app = angular.module('app', [])

app.factory 'MyFactory', ->
  val: 'Clark Kent'

app.controller 'MainCtrl', ($scope, MyFactory) ->
  MyFactory.val = 'Waldo'
  $scope.myFactory = MyFactory
Run Code Online (Sandbox Code Playgroud)

将其放入控制台:

angular.injector(['ng','app']).invoke(function(MyFactory) { console.log(MyFactory); })
Run Code Online (Sandbox Code Playgroud)

... 而不是Waldo,你会得到Clark Kent!!

为什么它不返回相同的对象?

看看plunkr

tas*_*ATT 5

Angular 中的服务是单例,因为它们每个注入器仅创建一次。

angular.injector然而创建了一个新的注入器函数。

要获取当前的应用程序注入器:angular.element(domElement).injector()

对于你的例子:

angular.element(document.querySelector('html')).injector().invoke(function(MyFactory) { console.log(MyFactory); })
Run Code Online (Sandbox Code Playgroud)