如何刷新模板和指令中存在的指令有自己的数据范围

时间:2017-01-10 14:40:09

标签: javascript angularjs angularjs-directive angularjs-scope

我有 - ng-view - 模板创建项目功能和相同的模板,其中包含一个加载已保存项目的指令。

现在,当我确实保存创建项目时,立即保存其项目的清单(来自指令)。

任何人都可以告诉我如何解决这个问题,因此,在保存项目后,立即刷新指令。

注意:指令链接功能正在调用$http并检索数据并填充在指令模板中。并在其他html模板中添加了指令元素。

html模板:(具有独立的控制器和范围)。

    <div>.....code</div>
    <div class="col-md-12">
    <parts-list></parts-list>
   </div>

指令代码:

(function () {
    angular.module("application")
       .directive("partsList", function (partService) {
           return {
               templateUrl: 'partsListView.html',
               restrict: 'E',
               scope: {},
               link: function ($scope) {
                   $scope.partList = [{}];
                   RetrieveParts = function () {
                       $scope.partList=partService.RetrieveParts();
                   };
               }
           };
       });
})();

2 个答案:

答案 0 :(得分:0)

在指令中使用isolated scope

return {
           templateUrl: 'partsListView.html',
           restrict: 'E',
           scope: {partList: '='},

template

<parts-list partList="list"></parts-list>

其中列表是ui将使用更新数据更新的位置。

查看使用basic Example

的孤立范围

答案 1 :(得分:0)

对于初学者,您的ReceiveParts变量没有正确的闭包。还有,你在调用这个功能吗?我不确定这个函数在哪里执行。

tiles;edit=blah

我学到了一个简单的技巧,通过简单地将我需要的逻辑与$ timeout服务同步来执行一些将函数逻辑与angularjs的摘要周期同步的指令连接起来是非常简单的($ timeout只是一个setTimeout调用后跟$ scope。$ apply())。做这个技巧会使你的代码看起来像:

link: function ($scope) {
               $scope.partList = [{}];
               RetrieveParts = function () {
                   $scope.partList=partService.RetrieveParts();
               };
           }

此外,您将注意到在设置partList之后我设置的布尔值。在您的HTML中,您可以对此变量进行ng-if(或ng-show / hide),以便仅在正确解析后显示列表。

我希望这会对你有所帮助。