2013-10-02 12 views
7

Tôi đã làm rất nhiều cách giải quyết, tìm kiếm và nghiên cứu, nhưng tôi không thể tìm ra cách để đạt được mục tiêu của mình.Đánh giá một biểu thức trong một thuộc tính của một chỉ thị trong AngularJS

- Vấn đề:

  • Tôi có một tình huống sau đây, tôi muốn tránh người dùng có thể hoa hồng trùng ngày tháng trong hợp đồng. Khi người dùng thêm hoa hồng mới, chúng tôi hiển thị danh sách có hoa hồng được thêm tạo ra với một lần lặp lại, điều này có khó khăn của người dùng có thể chỉnh sửa ngày. Trong phần hợp đồng, đây không phải là vấn đề, vì chỉnh sửa hợp đồng , bạn phải chuyển sang màn hình khác và chỉnh sửa, ngày không thể sửa đổi trong cùng một chế độ xem.

-Where tôi bị lẫn lộn:

  • Khi tôi chỉnh sửa một khoản hoa hồng đã được thêm vào, tôi phải so sánh nó với người khác rằng những gì thêm vào trước, vì vậy, tôi muốn có một danh sách , với tất cả các ngày của hoa hồng được xác định, và có thể nói trong chỉ thị, lập hóa đơn một hàm trả về một danh sách với tất cả các ngày không kể ngày hoa hồng mà tôi đang chỉnh sửa.

- Làm thế nào tôi hy vọng giải quyết nó:

  • tôi muốn làm một cái gì đó như thế này:

<input type="text" name="newComission_dateFrom" ng-model="newCommission.from" notincluded=myFunction({{$index}})/>

và chức năng myFunction, sẽ lặp trên một danh sách có chứa tất cả các addCommissionsDates và sẽ so sánh nó với tất cả các phạm vi ngày tháng, ngoại trừ với phạm vi chứa trong addCom misionsDates [index].

Mục tiêu là có thể đánh giá một biểu thức trong một thuộc tính mà không sử dụng một phạm vi riêng biệt.

Tôi đã có rất nhiều vấn đề với phạm vi cô lập, và tôi xong đồng ý với bài viết này:

When writing a directive, how do I decide if a need no new scope, a new child scope, or a new isolate scope?.


EDIT tôi đang tìm cách được thực hiện ngRequire, vì ngRequire thể chấp nhận ng-yêu cầu = "aFunction()", tôi đạt được mục tiêu này trong chỉ thị của tôi, sử dụng $ parsers. Vì vậy, Tôi có thể thực hiện một chức năng ngay bây giờ! Tôi đã thực hiện một số tiến trình bằng cách này, nhưng tôi muốn có kết quả thực hiện hàm trong chỉ thị của mình, tôi muốn đạt được một cái gì đó như thế này:

rangeToEval = // kết quả của hàm hoặc biểu thức của tôi.

Nhìn những điều mà có ngRepeat, tôi không thể hình dung những gì phạm vi là giá trị trả lại chức năng này

if(attrs.notincluded) { 
      var notIncludedValidator = function(value) { 
      ngModelCtrl.$setValidity('notincluded', !attrs.notincluded); 
      return value; 
     }; 
    } 

tất cả hoạt động tốt vì tôi đang sử dụng một boolean, nhưng, tôi muốn sử dụng một danh sách đó là kết quả của thực expresion trong thuộc tính notincluded

// kiến ​​đóng góp này là một phần của một ng-repeat

<input type="text" ng-model="commission.date" ng-required="true" notincluded="filterDatesFn({{$index}})" /> 

tôi có chức năng trong điều khiển của tôi:

$scope.filterDatesFn = function(index) { 
     // in this list, we will add the dates of the defined commissions 
     if($scope.addedCommisionsDate) { 
      var listToEvalue= []; 
      for (var i = 0; i < $scope.addedCommisionsDate.length; i++) { 
       if(i != index) { 
        listToEvalue.push($scope.addedCommisionsDate[i]); 
       } 
      } 
      return listToEvalue; 
     } 
    }; 

Vì vậy, mục tiêu tiếp theo của tôi là có thể thay đổi để:

if(attrs.notincluded) { 
      var notIncludedValidator = function(value) { 
      --put the listToEvalue here and do my comparations and validate or invalidate the form in base of the comparation That I do here. 
      return value; 
     }; 
    } 

tôi sẽ được đăng sự tiến bộ của nghiên cứu này.

Tôi sẽ biết ơn là ai đó có thể giúp hoặc chia sẻ bất kỳ ý tưởng nào

Hẹn gặp lại sau!

Trả lời

1

bạn đã thử vượt qua chức năng này như thông số '&' trong chỉ thị của bạn chưa?

như thế:

App.directive('myDirective', function(){ 
return { 
    scope: { 
     myFc: '&'//if the name of parameter is the same in html if not use '&nameOfParameter' 
    }, 

    link: function($scope, $el, $attr){ 
     $el.bind('click', function(value){ 
      $scope.myFc(value) 
     }) 
    } 
} 

})

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