Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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
Javascript 向ng include动态添加控制器_Javascript_Angularjs - Fatal编程技术网

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);       
  };
}]);