Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 控制器调用时需要工厂方法_Angularjs_Requirejs_Angularjs Service_Angularjs Factory - Fatal编程技术网

Angularjs 控制器调用时需要工厂方法

Angularjs 控制器调用时需要工厂方法,angularjs,requirejs,angularjs-service,angularjs-factory,Angularjs,Requirejs,Angularjs Service,Angularjs Factory,我使用的是angularJS和requireJS种子,您可以在这里下载: 在该种子中,只有被调用的控制器下载相关控制器,然后触发该控制器。我一直在尝试从我的控制器中调用工厂(运气不佳),另外,我希望服务/工厂仅在调用相关工厂时下载相关工厂 我试图在工厂方法中使用一个函数(很像控制器),但它不起作用 这就是我结束的地方:用户971824 我把我称之为Couch马铃薯的东西放在一起,lazy使用requirejs和$routeProvider(或任何其他基于lazy promise的解析的路由器)的

我使用的是angularJS和requireJS种子,您可以在这里下载:

在该种子中,只有被调用的控制器下载相关控制器,然后触发该控制器。我一直在尝试从我的控制器中调用工厂(运气不佳),另外,我希望服务/工厂仅在调用相关工厂时下载相关工厂

我试图在工厂方法中使用一个函数(很像控制器),但它不起作用

这就是我结束的地方:

用户971824

我把我称之为Couch马铃薯的东西放在一起,lazy使用requirejs和$routeProvider(或任何其他基于lazy promise的解析的路由器)的解析功能在angular中注册了几乎任何东西

我在你演示如何使用Couch马铃薯的基础上创建了一个plunker。如果你看一看,我想你会发现它有点简单,因为你实际上没有为所有你懒散注册的东西创建模块

Couch马铃薯源于我在web上找到的一些其他示例应用程序。我想要的是一种严格的延迟注册方式,提供商/服务组合似乎很理想。我还想保持一个组件依赖另一个组件的能力,就像在你的示例中,你希望控制器依赖于工厂……Couch马铃薯让你在requirejs语法中指定这些依赖项

因此,在我的格式副本中,您的控制器如下所示:

define(['app', 'myFactory'], function(app) {
  app.couchPotato.registerController([
    'mycontroller',
    [
      'myFactory',
      function(myFactory) {
        var message = myFactory.getCustomers();
        alert(message);
      }
    ]
  ]);
});
在本例中,我将控制器、工厂和值都设置为惰性,但您可以选择,让一些人在配置时以“老式方式”注册,其他人在给定路线需要时向Couch马铃薯注册

有几件事需要注意: 1) 为了触发控制器、服务(工厂)和版本值的延迟加载,我设置了一个默认路由。 2) 我修改了您的服务以附加版本,只是为了显示一个组件如何依赖于另一个组件(服务取决于版本值,控制器取决于服务)

因此,在require配置中,您实际上没有指定以下任何内容。。。这一切都是在你的路线内懒散地完成的

$routeProvider.when('/',
 $couchPotatoProvider.resolveDependenciesProperty({
  templateUrl:'home.html',
  controller: 'mycontroller',
  dependencies: [
   'mycontroller'
  ]
 })
);
由于mycontroller依赖于myFactory,myFactory依赖于版本,所以在显示路线时,它们都可用并已连接。我在home.html部分中添加了一些虚拟文本只是为了好玩,但是控制器是由$routeProvider分配的,所以实际上不需要在模板中指定它

如果你想看一些其他的样品,couchPotato住在。我根据angular对其进行了填充,因为我将其设计为在整个应用程序不一定使用requirejs的情况下可用。。。因此,如果您使用requirejs加载angular,则需要使用shim/deps技术使couchpato依赖于angular


LMK如果您有任何问题/意见。。。希望这有帮助

谢谢你的详细回复。我主要担心的是,我的申请不是SPA,这也是我只想在某些页面上需要服务的部分原因。我的问题是,使用路由和ng视图是这项工作的必要条件吗?我的应用程序中有一些部分不需要关注SEO,但是页面尤其是主页需要是可爬行的,所以我不能使用路由。我确实意识到我的用例很奇怪,但我使用angularJS的许多好处不仅仅是SPA的好处。事实上,我制作couchPotato时特别考虑了CMS的用例——也就是说,一个大型网站不能同时加载所有内容。SEO对于任何用javascript填充其内容的应用程序来说都是一个挑战,但是有一些工具/技术。。。SPA与路线的使用有何关系?你是说你想把你的内容放在很多不同的页面上吗?你不会一直重新加载你的代码吗?我知道有一种方法可以解决搜索引擎优化问题。我将考虑如何组合一个plunk,让您在不需要$routeProvider的情况下保持组件的独立性。。。我还没有做过任何这样的样品,但它应该是可行的。我真的很感谢你不遗余力的帮助。我想避免使用路由和ng视图,因为我知道机器人无法抓取使用javascript注入的内容。当然,我目前拥有的动态内容不会被抓取,但我仍然拥有静态内容和主要导航,这对机器人来说很重要。我打算有单独的网页是的,但如果有一个行之有效的解决方案,使水疗内容爬行,那么我也想听到它。Requirejs似乎对超级缓存很满意,但我不知道它是否可以跨多个页面缓存(可能不是)。我没有完全使用SPA的另一个原因是我发现指令太复杂了。创建自己的指令来做一些事情似乎很简单,但是创建一个指令来让jquery插件工作似乎太复杂、令人沮丧,而且有点浪费时间。