2014-09-04 113 views
1

謝謝大家。現在我將選擇一個詳細的答案並關閉它。角度雙向數據綁定不起作用

看到下面的代碼,這是相當直截了當

<tr ng-repeat="record in records track by record.id"> 
    <td><input type="checkbox"/></td> 
    <td ng-repeat="(name, value) in record" ng-hide="name == 'id'"> 
    <portia-td value="{{value}}"></portia-td> 
    </td> 
</tr> 

這裏是指令定義

return { 
    restrict: 'E', 
    replace: true, 
    transclude: true, 
    scope: { 
    value: '=' 
    }, 

    controller: function($scope) { 
    $scope.input = {show: false, value: $scope.value}; 
    }, 
    templateUrl: "td.html" 
    } 

爲什麼這樣產生的錯誤?但是在將範圍設置更改爲「@」時,它又會起作用。

+1

'值=「值」',而不是'值=「{{值}}」'因爲你結合的模式,而不是它的插值。 – ivarni 2014-09-04 13:10:36

+0

謝謝隊友。你救了我的一天。但我有關於$ watch的另一個問題。如果我看到使用Equality的「記錄」設置爲true。我改變了指令中的「值」,好像它沒有通知我的recordCtrl中的「記錄」改變了。 – castiel 2014-09-04 13:23:06

+0

「所以我想我應該重複使用這個問題來誘導新的問題。」,不,不這樣做。現在發佈到上一個問題的答案顯示爲新問題的答案。新問題應作爲單獨問題發佈,您應該回滾所做的修改。 – 2014-09-04 13:47:38

回答

1

如果您想要雙向數據綁定,則需要使用=。就像這樣:

scope: { 
    value: '=' 
} 

而關於HTML:

<portia-td value="value"></portia-td> 

當您使用"{{value}}",你基本上插值value屬性的值,並將它傳遞給了指令。這意味着angular將無法獲得創建雙向綁定的引用,只會得到一個值(string/number/etc ...)。

更多信息here

+0

非常感謝,隊友。感謝隊友 – castiel 2014-09-04 13:37:49