2013-09-05 28 views
12

Làm thế nào tôi có thể nhận được các tài sản khác từ json tải trong danh sách thả xuống/ng-optionsangularjs - vượt qua được lựa chọn các tài sản khác của đối tượng trên ng-change

On ng-change Tôi cũng muốn vượt qua Loại chiến dịch được lựa chọn đối tượng.

Tôi có thể làm như thế nào?

Xem của tôi là trông như

<div ng-app> 
    <div ng-controller="cCtrl"> 
     <select ng-model="campaign" ng-options="c.id as c.name for c in campaigns" ng-change="search2(c.campaignType)"> 
      <option value="">-- choose campaign --</option> 
     </select> 
    </div> 
</div> 

My điều khiển này được tìm như thế này

function cCtrl($scope) { 

    $scope.campaigns = [{ 
     "custID": 1, 
     "custName": "aaa ", 
     "msgID": 3, 
     "msgName": "Email Test Msg", 
     "id": 2, 
     "name": "Email Test Campaign", 
     "description": "Test Campaign", 
     "campaignType": "Email", 
     "created": "1374229715", 
     "isActive": 1, 
     "isDeleted": 0 
    }]; 

$scope.search2 = function (campaignType) { 
     alert(campaignType); // not working 
     alert($scope.campaign.campaignType); // not working 
     //console.log($scope.campaign.campaignType); 

    } 

} 

http://jsfiddle.net/webtheveloper/Qgmz7/8/

Trả lời

7

Kiểm tra này ra: http://jsfiddle.net/Qgmz7/9/

Bạn đang không ở trong một bối cảnh ngRepeat. ngOptions hoạt động hoàn toàn khác nhau.

ngModel trên <select> sẽ nhận được giá trị của <option>, không phải toàn bộ đối tượng. Một lần nữa, bạn không ở trong một ngRepeat, bạn không có quyền truy cập vào các đối tượng của bạn.

Không cần chuyển giá trị làm thông số, bạn có thể lấy giá trị từ $scope. Như một vấn đề của thực tế, bạn không cần ngChange một trong hai, bạn có thể chỉ $scope.$watch('campaign', ...)

Vì vậy

$scope.search2 = function() { 
    console.log($scope.campaign); 
} 
+0

xin lỗi điều này không phải những gì tôi đang tìm kiếm. Tôi muốn truy cập vào các tài sản khác ngoài id. – Developer

+0

Sau đó, tìm kiếm trong '$ scope.campaigns' như thế nào? http://jsfiddle.net/Qgmz7/11/ –

+0

Lỗi: _ không được xác định – Developer

22

Thay vì đi qua trong một thuộc tính, bạn có thể vượt qua các đối tượng được chọn vào chức năng như thế này

<select ng-model="campaign" ng-options="c.name for c in campaigns" ng-change="search2(campaign)"> 

Working Demo

+0

Còn cách nào khác không? Tôi đã thực hiện mã hóa của mình để nhận id trong chiến dịch, đó là lý do tại sao nó được thực hiện theo cách đó. sau đó về yêu cầu đi lên để truy cập các thuộc tính khác của đối tượng. Bây giờ tôi muốn vượt qua đối tượng hoặc tài sản với sự thay đổi tối thiểu. Khả thi? – Developer

+0

@Developer Trong mã của bạn, những gì được chọn làm mô hình chiến dịch là 'id' và được xác định bởi biểu thức hiểu' c.id as ... '. Vì vậy, tôi đoán không có cách nào khác * dễ dàng * kể từ khi bạn không thể vượt qua bất cứ điều gì khác hơn là 'id' để chức năng. – zsong

+0

mặc dù đây không phải những gì tôi đang tìm kiếm, nhưng cộng thêm một cho thời gian của bạn. – Developer

0

Bạn cũng có thể thử theo cách này (Hack chúng ta có thể nói),

<select ng-model="campaign" ng-options="c.id as c.name for c in campaigns" ng-change="search2(campaign,campaigns)"> 
     <option value="">-- choose campaign --</option> 
</select> 

Về cơ bản những gì đoạn mã này sẽ làm là nó sẽ chỉ vượt qua ng-mô hình cùng với toàn bộ danh sách thả xuống ng-change. Vì vậy, trong tìm kiếm2 Chức năng, bạn chỉ có thể tìm kiếm giá trị ng-model vào danh sách đó và nhận đối tượng mong muốn của bạn.

Fiddle để tham khảo: https://jsfiddle.net/vaibhavgavali92/7b7xdyzj/8/

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