AngularJS は http get リクエストを何度も呼び出し続けます!!
コントローラーで getContexts を直接呼び出すと問題ありませんが、 からhtml template
呼び出すと、get を呼び出し続けるだけです。
部分的な contextCtrl.js:
'use strict';
app.controller('ContextCtrl', function ContextCtrl($scope, $location, $http, $rootScope, ContextService) {
$scope.getContexts = function(keys)
{
$scope.contexts = {};
$http.get('/getContextsWS?keys=' + keys).
success(function(data){
$scope.contexts = data;
});
}
// This works
$scope.getContexts('["context::one", "context::two"]')
});
部分的な HTML セクション:
<section id="contextSection" ng-controller="ContextCtrl">
// This causes get to keep calling!
{{getContexts('["context::one", "context::two"]')}}
// Just checking
{{contexts|json}}
<nav>
<ul ng-show="contexts.length" ng-cloak>
<li ng-repeat="context in contexts">
<div class="view" ng-click="contextSelected(context)">{{context.name}}</div>
</li>
</ul>
</nav>
</section>
これは私を夢中にさせています!
さて、あなたの非表示フィールドの例を試してみましたが、うまくいかないようですが、おそらく何かが欠けています...
html:
<section id="contextSection" ng-controller="ContextCtrl">
<input type="hidden" ng-model="contextIds" copy-to-model value='@product.item.contextIds'/>
ディレクティブ:
mto.directive('copyToModel', function ($parse) {
return function (scope, element, attrs) {
$parse(attrs.ngModel).assign(scope, attrs.value);
}
});
コントローラー:
app.controller('ContextCtrl', function ContextCtrl($scope, $location, $http, $rootScope, ContextService) {
// I can read this, but it never changes, and without this the contextIds in the alert are null
$scope.contextIds = "...";
$rootScope.alert = function(text)
{
alert(text);
}
$rootScope.alert("$scope.contextIds: " + $scope.contextIds);
});
私は何が間違っているのですか?