我是Angular的新手。我正在修改包含用戶列表的現有管理頁面,並且可以爲每個用戶開啓/關閉角色。我正在嘗試向每個角色添加監視器,以便我可以保存更改。AngularJS:指定觀察者以ng-repeat創建的輸入
我使用的用戶指令(用於多用戶對象),並獲得從一個AJAX調用填充它JSON(用戶對象的數組,與角色的陣列):
[
{
"Email": "[email protected]",
"Roles": [
{
"Role": "admin",
"HasRole": true
},
...
]
},
...
]
在我的用戶指令HTML模板/代碼片段稱爲user_card.html,我遍歷角色輸出單選按鈕:
<div class="permission" ng-repeat="role in user.Roles">
<p>{{role.Role}} -- {{role.HasRole}}</p>
<input type="radio" id="{{user.Email}}_{{role.Role}}_false" ng-attr-name="{{user.Email}}_{{role.Role}}" ng-value="false" ng-model="role.HasRole" />
<label for="{{user.Email}}_{{role.Role}}_false"><span></span>Off</label>
<input type="radio" id="{{user.Email}}_{{role.Role}}_true" ng-attr-name="{{user.Email}}_{{role.Role}}" ng-value="true" ng-model="role.HasRole" />
<label for="{{user.Email}}_{{role.Role}}_true"><span></span>On</label>
</div>
我可以看到,NG-模型是否工作正常,因爲在上面的代碼段,我可以看到{{role.HasRole}}在true和false之間變化。
我想要做的是添加一個觀察器,以便角色發生更改時,將會觸發一個觀察器。我已經試過這個代碼(和幾個變種)無濟於事。這裏的用戶指令後面的JavaScript(user_card_directive.js):
scope.user.Roles.forEach(function (role) {
console.log(role);
scope.$watch('role.HasRole', function (newValue, oldValue) {
if (newValue !== oldValue) {
console.log(newValue);
};
});
});
我猜我做的東西在這個不正確user_card_directive.js對角色添加一個觀察者。
非常感謝您的幫助!
乾杯, 丹
爲什麼你需要一個手錶?對於範圍值的任何更改,角將觸發其摘要循環。我想簡單的ng-click/ng-change就足夠了。 – Yauza