【发布时间】:2014-12-15 14:41:43
【问题描述】:
我正在尝试编辑 ng-controller 元素之外的视图。我可以通过使用$rootScope 和 dom 操作来解决它,但我想知道如何通过原生 angularjs 来解决它?
HTML:
<body>
<div class="container">
<div class="block" ng-controller="BlockController as block">
<div><strong>Name:</strong> {{ block.name }}</div>
<a href ng-click="block.edit()">Edit</a>
</div>
</div>
<div class="container-editor">
<div id="block-editor"></div>
</div>
</body>
Js:
angular.module('app', [])
.controller('BlockController', BlockController);
function BlockController($compile, $scope)
{
this.name = 'default name';
this.edit = function() {
var $editor_html = ' <input type="text" ng-model="block.name" name="name" /> <a href ng-click="block.save()">Save</a>';
$editor_html = $compile($editor_html)($scope);
angular.element(document.querySelector("#block-editor")).html('').append($editor_html);
};
this.save = function() {
// save block
angular.element(document.querySelector("#block-editor")).html('');
};
}
这里是例子
【问题讨论】:
-
在控制器中保留编辑输入标签有问题吗?
-
您知道您可以在您的 Angular 应用程序中创建多个范围,一个嵌套在另一个范围内吗?然后给每个控制器一个自己的控制器,这样你就可以实现这个“Angular 方式”。
-
谢谢。 @Blazemonger 你能展示多个范围的例子吗?
-
您将
ng-controller="something"添加到外部 div 并将ng-controller="somethingelse"添加到内部 div。如果要从子控制器访问父范围,请使用$scope.$parent。 See this question for more.
标签: javascript angularjs angularjs-ng-model