Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
</body>
</html>
 
console.clear()
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg
var ARROW_ARG = /^([^(]+?)=>/
var FN_ARGS = /^[^(]*\(\s*([^)]*)\)/m
var FN_ARG_SPLIT = /,/
var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/
function ext_args(fn) {
  var str = Function.prototype.toString.call(fn).replace(STRIP_COMMENTS, ''),
    args = str.match(ARROW_ARG) || str.match(FN_ARGS)
  return args
}
function controller(name, fn) {
  var $inject = [],
    args = ext_args(fn)[1]
  if (args === "") return;
  var $injectable = {
    $scope: { name: "SCOPE" },
    $element: { name: "ELEMENT" },
    $props: ["foo", "bar", "baz"]
  }
  args.split(FN_ARG_SPLIT).forEach(function(arg) {
    arg.replace(FN_ARG, function(all, underscore, name) {
      $inject.push($injectable[name])
    })
  })
  fn.apply(null, $inject)
}
controller("MyController1", function($scope, $element, $props) {
  console.group("MyController1")
  console.log(1, $scope)
  console.log(2, $element)
  console.log(3, $props)
  console.groupEnd("MyController1")
})
controller("MyController2", function($props, $scope, $element) {
  console.group("MyController2")
  console.log(1, $scope)
  console.log(2, $element)
  console.log(3, $props)
  console.groupEnd("MyController2")
})
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers