我对AngularJS很新,但我必须开发一个搜索标签,打印$http.get
JSON
。
我的逻辑是将ng-model
附加$watcher
并打印数据。
我做得对吗?还有其他建议可以做得更好吗?
下面我粘贴代码:
discover.js
var discover = angular.module('app.discover', ['discover.factory']);
discover.controller('getDiscover', [ '$scope', 'img', 'search', function ($scope, img, search) {
var data = this;
$scope.$watch('searchStr', function (substring) {
if (substring && substring.length > 1) {
search.getJSON(substring).then(function (response) {
data.stories = response.stories;
data.tags = response.tags;
data.users = response.users;
});
}
});
}]);
_discover.html
<div style="padding-top:50px;">
<article>
<section>
{{my.stories}}
{{my.tags}}
{{my.users}}
</section>
</article>
</div>
修改
调查更多我错误地理解了我将要尝试解释的真正问题。
.state('discover', {
url: "/discover",
views: {
'header': { templateUrl: "app/Topbar/_topbarDiscover.html", controller: 'getDiscover', controllerAs: 'my' },
'content': { templateUrl: "app/Discover/_discover.html", controller: 'getDiscover', controllerAs: 'my' },
'footer': { templateUrl: "app/Navbar/_navbar.html", controller: 'NavbarController', controllerAs: 'my' }
}
});
这里的主要问题是我明白写同一个controller
意味着我对2 controller
使用相同的ui-views
,但事实是第一个controller
正在调用该操作,因此它是具有数据的顶栏controller: getDiscover
。
答案 0 :(得分:0)
另一种方法是使用关联数组来保存对象文字,以确定需要打印的内容
$scope.print = {stories: '', tags: '', users: ''};
您可以在此处使用$watch
,因为它会监控模型$scope.searchStr
中的任何更改。请记住,即使单个字符进入模型,也会调用此函数。您可以从angularJS API文档中查看ng-blur
作为替代方法。
$scope.$watch('searchStr', function (substring) {
if (substring && substring.length > 1) {
search.getJSON(substring).then(function (response) {
//parse Json
var parsedData = JSON.parse(response.data);
$scope.print.stories = parsedData.stories;
$scope.print.tags = parsedData.tags;
$scope.print.users = parsedData.users;
});
}
});
使用$http
,$resource
的服务以response.data
的形式返回有效内容。由于您的服务返回JSON,因此您需要在将其打印到视图上之前对其进行解析。
<div style="padding-top:50px;">
<article>
<section>
{{print.stories}}
{{print.tags}}
{{print.users}}
</section>
</article>
</div>