9

Làm cách nào để truy cập các chức năng điều khiển chỉ thị từ liên kết chỉ thị? Bellow điều khiển thông qua liên kết là sản phẩm nào, tôi muốn nhận được trong nó hiển thị() hide() chức năng.Làm thế nào để truy cập các chức năng điều khiển trong liên kết chỉ thị?

chỉ hiện tại của tôi:

app.directive('showLoading', function() { 
    return { 
    restrict: 'A', 
    // require: 'ngModel', 
    scope: { 
     loading: '=showLoading' 
    }, 
    controller: function($scope, $element) { 
     return { 
     show: function() { 
      alert("show"); 
     }, 
     hide: function() { 
      alert("hide"); 
     } 
     }; 
    }, 
    link: function($scope, $element, $attrs, controller) { 
     $scope.$watch('loading', function(bool) { 
     if (bool) { 
      controller.show();//undefined 
     } else { 
      controller.hide(); 
     } 
     }); 
    } 
    }; 
}); 

Trả lời

30

xuất bản trên phạm vi có thể làm việc, nhưng không phải thực hành tốt nhất, vì nó "gây ô nhiễm" phạm vi. Cách thích hợp để giao tiếp với bộ điều khiển riêng là require - sau đó nó sẽ trở thành sẵn có dưới dạng tham số cho hàm link cùng với các chỉ thị bắt buộc khác.

Vấn đề khác là cách bạn hiển thị các chức năng trên bộ điều khiển - điều này được thực hiện bằng cách sử dụng this.someFn, không phải bằng cách trả về một đối tượng.

app.directive('showLoading', function() { 
    return { 
    restrict: 'A', 
    require: ['ngModel', 'showLoading'], // multiple "requires" for illustration 
    scope: { 
     loading: '=showLoading' 
    }, 
    controller: function($scope, $element) { 
     this.show = function() { 
     alert("show"); 
     }; 

     this.hide = function() { 
     alert("hide"); 
     }; 
    }, 
    link: function($scope, $element, $attrs, ctrls) { 
     var ngModel = ctrls[0], me = ctrls[1]; 

     $scope.$watch('loading', function(bool) { 
     if (bool) { 
      me.show(); 
     } else { 
      me.hide(); 
     } 
     }); 
    } 
    }; 
}); 
+0

Cảm ơn bạn đã mô tả cách truy cập bộ điều khiển chỉ thị khi có bộ điều khiển yêu cầu bổ sung. –

-2

Bạn có một số loại vấn đề bên trong chức năng điều khiển

Dưới đây là mã làm việc tốt

app.directive('showLoading', function() { 
    return { 
    restrict: 'AE', 
    // require: 'ngModel', 
    scope: { 
     loading: '=showLoading' 
    }, 
    controller: function($scope, $element) { 
     $scope.show = function() { 
      alert("show"); 
     }, 
     $scope.hide = function() { 
      alert("hide"); 
     } 
    }, 
    link: function($scope, $element, $attrs) { 
     $scope.$watch('loading', function(bool) { 
     if (bool) { 
      $scope.show();//undefined 
     } else { 
      $scope.hide(); 
     } 
     }); 
    } 
    }; 
}); 
+1

Thật đáng tiếc khi câu trả lời này được đánh dấu là giải pháp. [Answer] (http://stackoverflow.com/a/29195873/5788429) được đăng bởi "New Dev" thực sự là cách tốt hơn. – Anton

Các vấn đề liên quan