javascript - 引用父作用域时,ng-repeat 内的 Angular 表达式不会被渲染

标签 javascript angularjs angularjs-ng-repeat expression directive

所以我正在 Angular 中实现 Elasticsearch 。到目前为止一切顺利,但我遇到了一个奇怪的情况。每个结果都有一个可由用户生成的关联标签。

这是我的表格和输入:

<form ng-submit="search($event)" class="queryBuilder ng-pristine ng-valid">
    <input type="text" ng-model="searchQuery" class="ng-pristine ng-untouched ng-valid">
</form>

结果显示得很好,标签也是如此。当我点击标签时,问题就出现了。最初,问题出在重复内部,他们无法访问上述 searchQuery 模型,因此我只是将其更改为目标 $parent.searchQuery 并且有效,但是挖掘这一点,一旦我这样做,表达式 item.tag 就不再起作用了。现在它正在输出实际的大括号和所有内容。

<button ng-repeat="item in items" ng-click="$parent.searchQuery = $parent.searchQuery + ' {{item.tag}}'; search();" class="tag ng-binding ng-scope">Tag Name</button>

我对 Angular 很陌生,使用 jQuery 已经有十亿年了,所以如果我错过了一些非常基本的东西,我提前道歉。我进行了搜索,可以找到与范围相关的 Material ,但找不到与目标父范围冲突的 ng-repeat 内的表达式。有什么想法吗?提前致谢!

最佳答案

字符串文字(本例中为 searchQuery )和基元不能在 Angular 或 Javascript 中的嵌套范围内引用。阅读有关此的著名教程 https://github.com/angular/angular.js/wiki/Understanding-Scopes

您使用了$parent最初工作正常,但是当您附加 ng-repeat 时它开始破裂,因为 ng-repeat创建一个新的范围,所以现在你的 $parent属性引用了不同的范围。

关于如何修复它:在 Controller 中定义一个对象,例如:

$scope.globalData = {};

现在引用您的每个ng-model使用此对象以避免范围问题:

<form ng-submit="search($event)" class="queryBuilder ng-pristine ng-valid">
    <input type="text" ng-model="globalData.searchQuery" class="ng-pristine ng-untouched ng-valid">
</form>

还有你的ng-repeat喜欢这个:

<button ng-repeat="item in items" ng-click="globalData.searchQuery = globalData.searchQuery + ' {{item.tag}}'; search();" class="tag ng-binding ng-scope">Tag Name</button>

这将使用 Javascript Object 引用您的搜索查询模型和Object在 Javascript 中可以由子实例引用,或者在 Angular 中,可以在嵌套 $scope 中引用.

只要确保你定义了 gloabalData (或任何你喜欢的名称)在顶级 Controller 中,例如添加到 <html> 的 Controller 中或<body > 标记,以便其范围可以在整个应用程序中使用。当然,您不必使用 $parent现在:-)

此外,您还可以清理您的 ng-click表达式如下:

ng-click="globalData.searchQuery = globalData.searchQuery + ' ' + item.tag; search();"

关于javascript - 引用父作用域时,ng-repeat 内的 Angular 表达式不会被渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34341171/

相关文章:

javascript - 为什么我的 Google Plus javascript 无法验证?

javascript - Webpack 无法从 node_modules 加载包

javascript - 从 HTML 标签初始化 AngularJS 模型

css - 如何控制 Angular UI Grid 中的滚动条

javascript - 在 AngularJs 中选择性地显示 ng-repeat

javascript - 如何在所有对象中插入属性?

javascript - Meteor iScroll 5 初始化

javascript - 什么会导致已部署的 GWT 应用程序出现 UmbrellaException 匿名函数?

html - Webpack:无法使用 url() 导入加载 CSS

javascript - 更新特定嵌套 ngRepeat 上的 limitTo 值