爵士小提琴裏面的前值http://jsfiddle.net/suras/JzaV9/4/AngularJS從指令設置模型值並調用父作用域函數持有到該函數
這是我的指令
'use strict';
barterApp.directive('autosuggest', function($timeout, $http) {
return {
restrict: "E",
scope: {
modelupdate:"=",
suggestions:"=",
urlsend:"@"
},
template: '<ul><li ng-repeat="suggest in suggestions" ng-click="updateModel(suggest)">{{suggest}}</li></ul>',
link: function (scope, element) {
scope.$watch('modelupdate', function() {
$timeout(function(){
$http.post(scope.urlsend, {q:scope.modelupdate}).then(function(data){
scope.suggestions = data.data;
console.log(data.data);
});
}, 3000);
});
scope.updateModel = function(value){
scope.modelupdate = value;
scope.$parent.getBookInfo();
}
}
};
});
控制器
barterApp.controller('openLibraryCtrl', ['$scope','$http',function ($scope,$http) {
$scope.title = "";
$scope.getBookInfo = function(value){
if($scope.title == "" || $scope.title == " ") //here title is 'r'(previous value)
{
return;
}
$http.get('/book_info.json?q='+$scope.title).then(function(res){
if(Object.keys(res).length !== 0)
{
data = res.data
console.log(data);
}
});
}
//here title is 'rails' (updated value from directive).
//(used a watch function here on model update
// and checked it but inside getBookInfo it is still 'r')
}]);
在更新模型函數中,我設置模型值並在父範圍上調用getBookInfo函數。但這裏的東西是(這是一個自動完成)時,我在包含ng模型的輸入字段中輸入值,例如'r'然後觸發手錶,然後我從後期url獲得建議(可以說「rails」 「搖滾」),並按照指令通過模板顯示。當我點擊其中一個建議(如'rails')時,它會觸發指令中的updatemodel函數並設置模型值。它的優良之處在於此,但是當我在父範圍中調用getBookInfo函數時,$ scope.title在函數內部是'r'(我使用控制檯日誌在函數外檢查模型值是否正確更新爲'rails')。再次當我點擊「搖滾」getBookInfo裏面的模型值是'rails'。 我不知道發生了什麼事。 (我還與控制器的監控功能測試的模型被正確地更新,但該函數調用getBookInfo保持回以前的值)
view
<form ng-controller="openLibraryController">
<input type="text" ng-model="title" id="title" name="book[title]" />
<autosuggest modelupdate = "title" suggestions = "book_suggestions" urlsend="/book_suggestions.json"> </autosuggest>
</form>
創建小提琴傾向於產生更快,更好的答案的;) – gkalpak
確定我將創建一個搗鼓它 – surendar
爵士小提琴http://jsfiddle.net/suras/JzaV9/4/ – surendar