Javascript 向ng include动态添加控制器
这是改变Javascript 向ng include动态添加控制器,javascript,angularjs,Javascript,Angularjs,这是改变ng include控制器的动态方式吗 我的应用程序允许用户创建一些页面内容和控制器。我可以更改ng includesrc,但我不知道如何动态关联新控制器。以下代码不起作用: <div ng-app="MyApp"> <div ng-controller="ParentController"> <select ng-model="currentItem" ng-options="item as item.url for item in
ng include
控制器的动态方式吗
我的应用程序允许用户创建一些页面内容和控制器。我可以更改ng include
src,但我不知道如何动态关联新控制器。以下代码不起作用:
<div ng-app="MyApp">
<div ng-controller="ParentController">
<select ng-model="currentItem" ng-options="item as item.url for item in items track by item.url">
</select>
{{ currentItem }}
<div ng-include src="currentItem.url" ng-controller="currentItem.controller"></div>
</div>
</div>
下面的项数组是一个普通对象数组,它有两个字段:url和controller,两者都包含字符串值
$scope.items = [{
url: 'page1.html',
controller: 'Page1Controller'
},... ]
您真正需要的是对功能的引用,这可以通过服务实现
尽管这可能起作用,但我不明白您为什么不使用
ParentController
来更改数组(或a)中的对象。我使用了一个指令:
<div ng-include src="currentItem.url" dyn-controller="currentItem.controller"></div>
这里的技巧是观察属性的变化,添加ng controller
,然后编译元素
谢谢你
及
使用指令而不是ng include,这就是它们的用途。我没有使用
ParentController
,因为项目数组和控制器声明是由我的用户动态创建的。一定是误解了您的问题。但您确实声明这是您“已经”拥有的代码。然而,你只是绑定一个字符串而不是一个控制器函数。一年后,这正是我需要的。让我们希望它能起作用:)Thanksterminal=true对于让它起作用至关重要
<div ng-include src="currentItem.url" dyn-controller="currentItem.controller"></div>
app.directive('dynController', ['$compile', '$parse',function($compile, $parse) {
return {
restrict: 'A',
terminal: true,
priority: 100000,
link: function(scope, elem, attrs) {
// Parse the scope variable
var name = $parse(elem.attr('dyn-controller'))(scope);
elem.removeAttr('dyn-controller');
elem.attr('ng-controller', name);
// Compile the element with the ng-controller attribute
$compile(elem)(scope);
};
}]);