Javascript 覆盖角度控制器

Javascript 覆盖角度控制器,javascript,angularjs,Javascript,Angularjs,我试图在Angular 1.4中的运行时覆盖控制器 我正在使用Angular和Webpack,我的最终目标是能够用HMR(热模块更换)重新加载控制器。然而,我现在的障碍是如何正确地更新控制器 所以最后如果你有 angular.module('app').controller('HomeController', function() { this.message = 'Hello World!'; }); 然后,在webpack dev服务器运行时,您将控制器修改为: angular.mod

我试图在Angular 1.4中的运行时覆盖控制器

我正在使用Angular和Webpack,我的最终目标是能够用HMR(热模块更换)重新加载控制器。然而,我现在的障碍是如何正确地更新控制器

所以最后如果你有

angular.module('app').controller('HomeController', function() {
  this.message = 'Hello World!';
});
然后,在webpack dev服务器运行时,您将控制器修改为:

angular.module('app').controller('HomeController', function() {
  this.message = 'Goodbye World!';
});   
当前状态中的控制器应适当更新。我已经有了重新加载状态的逻辑($state.transitiono)

我正在使用UI路由器和Babel,尽管Babel应该是相当不相关的,因为我没有使用一半的好处(即类)


有人有什么想法吗?

我不确定项目的其余部分是如何设置的,但您的网页配置可能只有一个入口点。因此,像索引一样将控制器/服务等导入该入口点是有意义的

控制器:

// Main.js

export default function HomeController () {
  this.message = 'Hello World!'
}
索引:

// entry.js

import angular from 'angular'
import HomeController from './controllers/HomeController.js'

angular
  .module('app', [])
  .controller('HomeController', HomeController)

在我所做的这个初学者项目中,我的控制器更改似乎正在正确更新,虽然它不是HMR,只是实时重新加载。

我不确定项目的其余部分是如何设置的,但您的webpack配置可能只有一个入口点。因此,像索引一样将控制器/服务等导入该入口点是有意义的

控制器:

// Main.js

export default function HomeController () {
  this.message = 'Hello World!'
}
索引:

// entry.js

import angular from 'angular'
import HomeController from './controllers/HomeController.js'

angular
  .module('app', [])
  .controller('HomeController', HomeController)

在我所做的这个入门项目中,我的控制器更改似乎正在正确更新,尽管它不是HMR,只是实时重新加载。

我为所有感兴趣的人找到了解决方案。为了使HMR在angular中与控制器一起工作,有效地重写控制器函数的主体,我将一个init函数绑定到模块(aka文件)之外的一个持久的JavaScript对象


我为你们所有感兴趣的人想出了解决办法。为了使HMR在angular中与控制器一起工作,有效地重写控制器函数的主体,我将一个init函数绑定到模块(aka文件)之外的一个持久的JavaScript对象


现在,当你说“热模块更换”时,你是指观看吗?或者您希望其他控制器保持其状态吗?这里的目标是什么?这看起来不像是有实际用途的东西。一个真实的用例可能会让你更容易理解你真正想要完成的事情。如果你不知道HMR是什么,你就看不到它的用处。它依赖于注入和重写javascript来产生效果。简单地“替换”控制器将取消所有绑定,并使标记没有任何绑定。在过去,我用纯指令实现了这类事情。它不是非常优雅,但给了我控制权,可以完全
$destroy
隔离作用域并替换html。我使用
$compile
将新的运行时定义的范围绑定到新的运行时定义的html模板。如果这听起来像是一个方向,你可能会喜欢去,我可以详细的回答方法。哦,哇,听起来很糟糕。谢谢你的提醒。ArgghhvNow当你说“热模块更换”时,你是指观看吗?或者您希望其他控制器保持其状态吗?这里的目标是什么?这看起来不像是有实际用途的东西。一个真实的用例可能会让你更容易理解你真正想要完成的事情。如果你不知道HMR是什么,你就看不到它的用处。它依赖于注入和重写javascript来产生效果。简单地“替换”控制器将取消所有绑定,并使标记没有任何绑定。在过去,我用纯指令实现了这类事情。它不是非常优雅,但给了我控制权,可以完全
$destroy
隔离作用域并替换html。我使用
$compile
将新的运行时定义的范围绑定到新的运行时定义的html模板。如果这听起来像是一个方向,你可能会喜欢去,我可以详细的回答方法。哦,哇,听起来很糟糕。谢谢你的提醒。argghhv我不喜欢这种方法的唯一原因是,您必须在控制器文件之外指定控制器,并且必须通过$inject注入依赖项。我不喜欢这种方法的唯一原因是,您必须在控制器文件之外指定控制器,并且必须注入依赖项通过$inject。