角和同位素-在同位素上下文中添加新项目
angular and isotope - Adding new item within isotope context
更新:在@Marc Kline写了一些非常有见地的代码之后,我回去整理了一下我的页面。结果发现我的控制器是反向排列的(我的角度控制器位于同位素控制器内部,而不是相反)。一旦我把它改回来,并清理了一些额外的脚本,它又开始工作了。我已经更新了代码片段以反映更改。谢谢Marc和S.O!
我有麻烦弄清楚我如何使用Angular添加新项目,仍然让同位素管理他们的UI显示。
我使用同位素和角渲染服务器结果在砖石风格的布局。当我在点击按钮的布局中添加新项目时,angular会很好地添加它。但是,它们不会出现在同位素UI的上下文中,而是单独出现(并且不能使用同位素进行排序,布局或过滤)。
这是我的JS代码
<!-- Define controller -->
var contrl = app.controller("MainController", function($scope){
$scope.items ={!lstXYZ}; //JSON data from server
//Function called by button click
$scope.addItem = function(item)
{
$scope.items.push(item);
$scope.item = {};
}
});
contrl.$inject = ['$scope'];
这是显示服务器结果的HTML…(更新以显示工作代码…请参阅注释)
<div ng-controller="MainController">
<div class="isotope" id="isotopeContainer">
<div ng-repeat="item in items">
<div class='element-item {{item.status}}' data-category='{{item.status}}'>
<p class="number">{{item.type}}</p>
</div>
</div>
</div>
</div>
这里是添加新项目的HTML按钮
<table>
<tr>
<td><input type="text" ng-model="item.status" /></td>
</tr>
<tr>
<td><input type="text" ng-model="item.type" /></td>
</tr>
<tr>
<td colspan="2"><input type="Button" value="Add" ng-click="addItem(item)" /> </td>
</tr>
</table>
我不确定如何确保同位素能够识别新添加的元素并重新激活布局。
任何帮助或指示将非常感激。谢谢!
ng-repeat
负责将新元素添加到DOM中。然而,同位素不会为你做任何"监视"——你必须手动调用容器的重新绘制。
您可以直接将$("#isotopeContainer").isotope(...)
之类的东西添加到您的控制器中,但是为了保持您的控制器精简和免于dom相关代码,您应该创建一个服务。比如:
myApp.service('Isotope', function(){
this.init = function(container) {
$(container).isotope({itemSelector: '.element-item'});
};
this.append = function(container, elem) {
$(container).isotope('appended', elem);
}
});
…其中第一个方法初始化一个新的同位素容器,第二个方法在附加项后重新绘制该容器。
你可以把这个服务注入到任何控制器或指令中,但在这种情况下,指令可能是最好的。在这个Plunker中,我创建了两个新指令:一个用于同位素容器,另一个用于Isotype元素,并使用该服务进行初始化和重绘。
在这个特殊情况下,我的代码没有正确编写。我已经更新了问题的代码,但想在这里更清楚地提到它…
显然,Angular的美妙之处在于你不需要为底层UI框架操心(在这个例子中是同位素)。只要你更新了Angular的数据数组,UI绑定就会自动更新。
唯一的问题是要确保UI框架的div是在你的Angulardiv的上下文中。
这是不工作的代码…请注意,同位素div位于Angular控制器之外。
<div class="isotope" id="isotopeContainer">
<div ng-controller="MainController">
<div ng-repeat="item in items">
<div class='element-item {{item.status}}' data-category='{{item.status}}'>
<p class="number">{{item.type}}</p>
</div>
</div>
</div>
</div>
下面是在Angular控制器上下文中运行同位素的更新后的代码…
<div ng-controller="MainController">
<div class="isotope" id="isotopeContainer">
<div ng-repeat="item in items">
<div class='element-item {{item.status}}' data-category='{{item.status}}'>
<p class="number">{{item.type}}</p>
</div>
</div>
</div>
</div>
希望这对你有帮助。我很感谢所有的回应和帮助我从SO。珍惜这次学习的机会。
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在映射数组中添加换行符
- 正在将数据主题添加到所有项目
- ZeroClipboard-在复制之前添加到值
- 我可以在json对象中添加一个函数吗
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何添加浮动和非浮动,其他
- jQuery同位素插件添加过滤器
- 在动态添加的图像上实现Jquery同位素
- 添加'错误'消息发送到同位素.JS搜索筛选器
- 为查询同位素过滤添加动画
- 添加图像时重叠同位素图像
- 向 jquery 同位素添加一个计数器
- 将HTML添加到JQuery同位素插件/插入项第2部分
- 将HTML添加到JQuery同位素加载项/插入项
- Jquery同位素PLugin:自定义布局模式:类别行-如何为每个类别行添加标题
- 角和同位素-在同位素上下文中添加新项目
- 使用数据-同位素添加沟值并设置潜水高度
- 同位素添加关闭按钮