<span>var typeAhead = angular.module('app', []); </span> typeAhead<span>.factory('dataFactory', function($http) { </span> <span>return { </span> <span>get: function(url) { </span> <span>return $http.get(url).then(function(resp) { </span> <span>return resp.data; // success callback returns this </span> <span>}); </span> <span>} </span> <span>}; </span><span>});</span>以前的代码创建了一个名为DataFactory的工厂,该工厂从API中检索JSON数据。我们不会介绍工厂的详细信息,但是我们需要简要了解$ HTTP服务的工作原理。您将URL传递到get()函数,该函数返回承诺。然后,对此诺言的另一个呼吁也返回另一个承诺(我们从工厂的get()函数中返回了这一承诺)。通过将成功回调的回报值传递给当时(),该承诺得到解决。因此,在控制器内部,我们不会直接与$ HTTP互动。相反,我们要求控制器中的工厂实例,并使用URL调用其get()函数。因此,我们与工厂交互的控制器代码看起来像这样:
typeAhead<span>.controller('TypeAheadController', function($scope<span>, dataFactory</span>) { // DI in action </span> dataFactory<span>.get('states.json').then(function(data) { </span> $scope<span>.items = data; </span> <span>}); </span> $scope<span>.name = ''; // This will hold the selected item </span> $scope<span>.onItemSelected = function() { // this gets executed when an item is selected </span> <span>console.log('selected=' + $scope.name); </span> <span>}; </span><span>});</span>以前的代码使用称为状态的API端点。JSON返回美国州的JSON列表。数据可用时,我们将列表存储在范围模型项目中。我们还使用模型名称保存所选项目。最后,当用户选择特定状态时,onItemselected()函数将执行。
typeAhead<span>.directive('typeahead', function($timeout) { </span> <span>return { </span> <span>restrict: 'AEC', </span> <span>scope: { </span> <span>items: '=', </span> <span>prompt: '@', </span> <span>title: '@', </span> <span>subtitle: '@', </span> <span>model: '=', </span> <span>onSelect: '&' </span> <span>}, </span> <span>link: function(scope<span>, elem, attrs</span>) { </span> <span>}, </span> <span>templateUrl: 'templates/templateurl.html' </span> <span>}; </span><span>});</span>在指令中,我们正在创建一个定义几个属性的孤立范围:
<span>var typeAhead = angular.module('app', []); </span> typeAhead<span>.factory('dataFactory', function($http) { </span> <span>return { </span> <span>get: function(url) { </span> <span>return $http.get(url).then(function(resp) { </span> <span>return resp.data; // success callback returns this </span> <span>}); </span> <span>} </span> <span>}; </span><span>});</span>
typeAhead<span>.controller('TypeAheadController', function($scope<span>, dataFactory</span>) { // DI in action </span> dataFactory<span>.get('states.json').then(function(data) { </span> $scope<span>.items = data; </span> <span>}); </span> $scope<span>.name = ''; // This will hold the selected item </span> $scope<span>.onItemSelected = function() { // this gets executed when an item is selected </span> <span>console.log('selected=' + $scope.name); </span> <span>}; </span><span>});</span>首先,我们渲染一个输入文本字段,用户将在其中输入。范围属性提示分配给占位符属性。接下来,我们浏览状态列表,并显示名称和缩写属性。这些属性名称是通过标题和字幕范围属性配置的。指令NG-Mouseenter和NG类用于突出显示用户与鼠标徘徊的条目。接下来,我们使用过滤器:模型,该模型通过输入字段中输入的文本过滤列表。最后,当输入文本字段为空或用户选择项目时,我们使用了NG-HIDE指令隐藏列表。所选属性设置为true handleselection()函数内部,并将某人开始输入输入字段时设置为false(显示建议列表)。
typeAhead<span>.directive('typeahead', function($timeout) { </span> <span>return { </span> <span>restrict: 'AEC', </span> <span>scope: { </span> <span>items: '=', </span> <span>prompt: '@', </span> <span>title: '@', </span> <span>subtitle: '@', </span> <span>model: '=', </span> <span>onSelect: '&' </span> <span>}, </span> <span>link: function(scope<span>, elem, attrs</span>) { </span> <span>}, </span> <span>templateUrl: 'templates/templateurl.html' </span> <span>}; </span><span>});</span>功能handleselection()用选定的状态名称更新范围属性,模型。然后,我们重置当前和选定的属性。接下来,我们将函数OnSelect()称为函数。添加延迟是因为分配范围。model= SelectedItem不会立即更新绑定的控制器范围属性。在使用所选项目更新模型后,希望执行控制器范围回调函数。这就是我们使用$超时服务的原因。 此外,在模板中使用函数ISCurrent()和setCurrent(),以突出显示自动完整建议中的条目。以下CSS还用于完成高光进程。
<span>{ </span> <span>"name": "Alabama", </span> <span>"abbreviation": "AL" </span><span>}</span>
<span><span><span><input</span> type<span>="text"</span> ng-model<span>="model"</span> placeholder<span>="{{prompt}}"</span> ng-keydown<span>="selected=false"</span> /></span> </span><span><span><span><br</span>/></span> </span> <span><span><span><div</span> class<span>="items"</span> ng-hide<span>="!model.length || selected"</span>></span> </span> <span><span><span><div</span> class<span>="item"</span> ng-repeat<span>="item in items | filter:model track by $index"</span> ng-click<span>="handleSelection(item[title])"</span> <span>style<span>="<span>cursor:pointer</span>"</span></span> ng-class<span>="{active:isCurrent($index)}"</span> ng-mouseenter<span>="setCurrent($index)"</span>></span> </span> <span><span><span><p</span> class<span>="title"</span>></span>{{item[title]}}<span><span></p</span>></span> </span> <span><span><span><p</span> class<span>="subtitle"</span>></span>{{item[subtitle]}}<span><span></p</span>></span> </span> <span><span><span></div</span>></span> </span><span><span><span></div</span>></span></span>
} >如何使用Typeahead?打字,您可以使用键入选项的属性。此属性允许您在选择匹配时指定一个函数。该函数将通过选定的项目传递。例如: //对所选项目 $ scope.getStates = function(val){
记住将此CSS包含在您的主CSS文件中或HTML文件中的>如何通过使用Typeahead-min-min-length属性来完成打字机下拉下拉中的建议数量?此属性指定在打字开始之前必须输入的最小字符数。
};
>我可以在AngularJS中使用Bootstrap使用Typeahead?该模块根据Bootstrap的标记和CSS提供了一组AngularJS指令。 Typeahead指令可用如下:
在此示例中,状态是一个状态。状态数组,$ viewValue是用户输入的值,Limitto:8将建议数限制为8。 AngularJS?>使用Typeahead与AngularJS中的远程数据使用,您可以使用$ HTTP服务从远程服务器获取数据。打字机属性可用于将输入字段绑定到被提取的数据。例如:
>返回$ http.get('/api/state',{params:{
})。 item.name;
});};
};
在此示例中,getStates是一个基于远程服务器的状态的函数用户。
以上是使用AngularJS创建一个打字机小部件-SitePoint的详细内容。更多信息请关注PHP中文网其他相关文章!