2

當結合到ngModel,如果你有一個對象:

scope.someObj = { 
    prop: 10, 
    prop2: [20, 30], 
    subObj: { 
     prop: 40 
    } 
} 

,你將其連接到一些輸入字段,像這樣:

<input type="number" ng-model="someObj.prop" /> 
<input type="number" ng-model="someObj.prop2[0]" /> 
<input type="number" ng-model="someObj.prop2[1]" /> 
<input type="number" ng-model="someObj.subObj.prop" /> 

,把一個事件偵聽器$使他們每個人的扳機,就像這樣:

ngModel.$render = function() {console.log("Hello");}; 

的$渲染只會消防日第一個輸入是編輯的,但從來沒有其他人在。基本上,$ render不會觸發綁定到比一個層次更深的任何東西的模型。

有沒有辦法迫使它這樣做呢?

+0

這很奇怪。你如何添加'$ render()'方法?我認爲你有一個自定義指令,對吧?你可以提供一個與plunker的實時代碼示例? –

+0

是的,這一切都發生在自定義指令中。這完全是這個討論的一部分:https://github.com/angular-ui/angular-ui/issues/252現在工作在一個plunker上,完成後會更新OP。 – Swader

+0

這就是爲什麼(我不知道爲什麼他們正在執行它的守望函數內部,而不是回調):https://github.com/angular/angular.js/blob/a22596c925a41c6f9b78cb21e18894987bbbc84b/src/ng/directive/input .js文件#L1084 – ProLoser

回答

2

我用$範圍。$看對其進行監控。

<input ng-model="myInputs.a"> 
<input ng-model="myInputs.b"> 

var obj = {}; 

$scope.$watch('myInputs', function(){ 
    // do whatever here .... 
    // you can assign variables to myInputs 
    obj.x = myInputs.a; 

    }, true); 

這裏的關鍵是要添加的最後一個參數true,所以深監控你的對象。

+0

關注幫助,通過這個可以清楚地看出:HTTPS ://github.com/angular-ui/ui-slider/blob/master/src/slider.js#L48您可以更新您的代碼以使用attributes.ngModel,而不是「someObj中」這樣我就可以將其標記爲正確的嗎? – Swader

+0

我不認爲看attributes.ngModel會工作。您可能需要將範圍內的myInput綁定並觀察它,或者觀察返回myInput的函數。見http://stackoverflow.com/questions/14693052/watch-ngmodel-from-inside-directive-using-isolate-scope – yoonchee

+0

yoonchee - 通常你會看一個控制器內部模型。 – Lance

0

您的解決方案去like this

<!DOCTYPE html> 
<html ng-app="plunker"> 

    <head> 
    <meta charset="utf-8" /> 
    <title>AngularJS Plunker</title> 
    <script>document.write('<base href="' + document.location + '" />');</script> 
    <link rel="stylesheet" href="style.css" /> 
    <script data-require="[email protected]" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js" data-semver="1.0.7"></script> 
    <script src="app.js"></script> 
    </head> 

    <body ng-controller="MainCtrl"> 
    <input type="number" ng-model="someObj.prop" /> 
    <input type="number" ng-model="someObj.prop2[0]" /> 
    <input type="number" ng-model="someObj.prop2[1]" /> 
    <input type="number" ng-model="someObj.subObj.prop" /> 
    </body> 

</html>