2016-09-29 3 views
0

Я хочу создать директиву angularjs, которая добавляет новую директиву после вызова ajax.

var app = angular.module("app",[]); 

// This directive is simple search operation. 

app.directive("search", function("$http", function($http){ 
    return { 
     restrict: "E", 
     template: '<input type="text" ng-model="searchText"/> <button ng-click="search()">Search</button>', 
     controller: function($scope){ 
      $scope.search = function(){ 
       $http({url: "..."}) 
        .then(function(response){ 
         $scope.searchResult = response.data; 
        }); 
      } 
     }, 
     link: function(scope,element){ 
      var directiveHtml = ('<search-result></search-result>'); 
      var directiveElement = $compile(directiveHtml)(scope); 
      element.append(directiveElement); 
     }  
    } 
}); 

app.directive("searchResult", function(){ 
    return { 
     restrict: "E", 
     template: "list of the search result", 
     link: function(scope,element){ 

     } 
    } 
}); 

Я хочу добавить директиву после результата $ http. Но он добавляет раньше. Я применил $ scope. $ Watch (scope.searchResult), но не работает.

+0

$ часы должны также иметь обработчик. т.е. функция, выполняемая при изменении значения - '$ scope. $ watch ([выражение, возвращающее наблюдаемое значение], [change handler], [objectEquality?]);' –

ответ

1
controller: function($scope){ 
     $scope.search = function(){ 
      $http({url: "..."}) 
       .then(function(response){ 
        $scope.searchResult = response.data; 
       }); 
     } 
    }, 
    link: function(scope,element){ 
     $scope.$watch('searchResult', function(results) { 
      if (results) { 
       var directiveHtml = ('<search-result></search-result>'); 
       var directiveElement = $compile(directiveHtml)(scope); 
       element.append(directiveElement); 
      } 
     }) 
    } 

Или вы можете использовать ng-if в html

0
controller: function($scope, $http){ 
      $scope.search = function(){ 
       $http({url: "..."}) 
        .then(function(response){ 
         $scope.searchResult = response.data; 
         var directiveHtml = ('<search-result></search-result>'); 
         var directiveElement = $compile(directiveHtml)($scope); 
         angular.element(document.getElementById('id')).append(directiveElement); 
        }); 
      } 
     } 
+0

Функция ссылки будет вызываться при указании рендеринга и в то же время элемент добавляется, а не добавляет его в ссылку, добавляет его в ответ ajax в контроллере. Дать идентификатор для поиска директивы, например. , – Abdul

Смежные вопросы