0

我有两个问题:

  1. 我有一个表格。用户按下保存按钮后,将向服务器发送一个放置请求。响应包含新对象的 id。现在我想将路线从 test.com/object 更改为 test.com/object/1。由于我拥有所有信息,我不想再次运行控制器(这将再次从服务器加载对象,但这没用)。简短版:如何在不重新加载控制器的情况下更改路线?如果这是不可能的,那么最好的方法是什么?

  2. 我有两个控制器,它们非常相似。一个很好的例子是 createObject- 和 editObject-Controller。我想分享几乎所有功能,但有一些特定于控制器的方法不同。我喜欢服务,但在这种情况下我没有看到很大的优势,因为我不想只分享逻辑,我想分享事件处理程序本身的定义。简短版本:为控制器创建继承的方法是什么?

我期待着答案和好主意!非常感谢!

干杯

4

2 回答 2

2

更改路由而不是视图(或控制器)的典型(内置)Angular 方法是仅通过更改 URL 的搜索部分$location.search('someSearchParam', searchParamValue)必须将reloadOnSearch设置false为才能正常工作。当 URL 更改时,会广播事件$routeUpdate,因此您的控制器可以侦听此事件以了解某些内容已更改。另请参阅使用 $location.path 但没有 ngView 重新加载的 AngularJS 分页

控制器继承可能不是一个好主意。您可以使用一个控制器和 ng-show/hide 来显示页面的“创建”或“编辑”版本,如 $scope 属性所示,例如 $scope.editMode:

<div> 
  <span ng-show="editMode">Edit Object</span>
  <span ng-hide="editMode">Create Object</span>
</div>
<div>Name: <input type="text" ng-model="name"></div>
...
<div>
  <input type="submit" ng-show="editMode" ng-click="update()">Update
  <input type="submit" ng-show="editMode" ng-click="create()">Create
</div>

如果您确实想尝试控制器继承,请注意范围继承,而不是控制器。控制器范围原型从其父范围继承。有关此主题的更多信息,请参阅AngularJS 中范围原型/原型继承的细微差别是什么?

于 2013-02-07T17:22:23.020 回答
0

谢谢马克,你帮了我很多!

改变路线的事情并不能真正让我满意,但我认为这是目前唯一的方法。在我看来,应该可以更改路由而不仅仅是参数,而无需重新加载任何控制器。希望这将在未来的版本中成为可能!

于 2013-02-07T21:09:38.957 回答