Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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_Angularjs Directive - Fatal编程技术网

AngularJS在指令中动态加载内容

AngularJS在指令中动态加载内容,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在构建一个AngularJS应用程序,我希望根据调用的位置动态加载不同的html模板。我是AngularJS的新手,所以我很可能不适合这种方法 html <div ng-controller="ProjectsCtrl" ng-init="getProjects()"> <div ng-repeat="project in projects> <button ng-click="">Create New Project</bu

我正在构建一个AngularJS应用程序,我希望根据调用的位置动态加载不同的html模板。我是AngularJS的新手,所以我很可能不适合这种方法

html

<div ng-controller="ProjectsCtrl" ng-init="getProjects()">
    <div ng-repeat="project in projects>
        <button ng-click="">Create New Project</button>
        <button ng-click="">Cancel</button>
        <div ng-repeat="task in projects.tasks>
            <button ng-click="">Create New Task</button>
            <button ng-click="">Cancel</button>
        </div>
   </div>
</div>
<focus-pane></focus-pane>
<div ng-controller="ProjectsCtrl" ng-init="getProjects()">
    <div ng-repeat="project in projects>
        <button ng-click="createProject(project, '_create_project.html')">Create New Project</button>
        <button ng-click="">Cancel</button>
        <div ng-repeat="task in projects.tasks>
            <button ng-click="createProject(task, '_create_task.html')">Create New Task</button>
            <button ng-click="">Cancel</button>
        </div>
   </div>
</div>
<focus-pane></focus-pane>
因此,当单击“创建新项目”按钮时,我想做两件事:

  • 传入
    项目
    任务
    对象,并在
    focusPane
    指令中使用它
  • 传入要在指令中动态加载的模板的名称
  • 我在想,在伪代码中,html应该是这样的:

    html

    <div ng-controller="ProjectsCtrl" ng-init="getProjects()">
        <div ng-repeat="project in projects>
            <button ng-click="">Create New Project</button>
            <button ng-click="">Cancel</button>
            <div ng-repeat="task in projects.tasks>
                <button ng-click="">Create New Task</button>
                <button ng-click="">Cancel</button>
            </div>
       </div>
    </div>
    <focus-pane></focus-pane>
    
    <div ng-controller="ProjectsCtrl" ng-init="getProjects()">
        <div ng-repeat="project in projects>
            <button ng-click="createProject(project, '_create_project.html')">Create New Project</button>
            <button ng-click="">Cancel</button>
            <div ng-repeat="task in projects.tasks>
                <button ng-click="createProject(task, '_create_task.html')">Create New Task</button>
                <button ng-click="">Cancel</button>
            </div>
       </div>
    </div>
    <focus-pane></focus-pane>
    
    
    创建新任务
    取消
    

    …然后我会在
    项目中声明这些函数。然而,正如我所说,我刚刚进入AngularJS,我不确定这是一条正确的道路。在AngularJS文档中,我找不到关于在指令中动态加载内容的更多信息。

    是的,前面的评论是正确的(取决于您的工作环境),但仍然可以创建一个指令来为您加载动态模板。这里有一个例子

    }]))


    我发现有时在创建指令时,它们实际上需要控制请求的数据。毕竟,这就是ngView所做的,对吗?这也是一个指令。您只需确保在任何DOM操作开始之前拥有所有数据

    创建一个提供程序,该提供程序是可配置的,在启动指令时可用。建议不要在指令中加载数据。最好创建一个服务(处理各种$http请求)并将其注入控制器中。一般来说:乍一看,棱角分明可能有点令人困惑。我强烈推荐这段视频作为熟悉Angular细节的起点:因此,指令不是实现我意图的最佳方式?不,指令是用新功能扩展html的一种方式。可以考虑在指令中使用控制器。这是一种更好的方法,但一般来说,加载数据应该在服务中完成(注入到指令或控制器中),因此,可能是路由提供者根据附加的url名称加载不同的模板,例如
    #create project