0

我有一个简单的笔记应用程序,它在文本区域中显示笔记列表和活动的、选定的笔记。我希望能够在列表中选择一个注释并对其进行编辑。

在我的控制器中,我有一个“活动”变量,它指向笔记列表中的一个项目。仅使用 AngularJS 就可以了。如果我添加 AngularFire,每当我更改文本区域中的内容时,活动元素就不再连接。存储此活动参考是一个坏主意吗?

这是控制器的相关部分:

var notesApp = angular.module('notesApp', ['firebase']);
function NotesCtrl($scope, angularFire) {
    var fireBaseUrl = new Firebase('https://mynotesapp.firebaseio.com/notes');
    $scope.notes = [];
    $scope.select = function (note) {
        $scope.active = note;
    };
    angularFire(fireBaseUrl, $scope, 'notes').then(function () {
        $scope.active = $scope.notes[0];
    });
}

和 HTML:

<ul>
  <li ng-repeat="note in notes" ng-class="{active: note == active}">
    <a href="#" ng-click="select(note)">{{ note.title }}</a>
  </li>
</ul>
<textarea ng-model="active.body"></textarea>

一个完整的例子在这里:http: //jsfiddle.net/4zsMH/

4

1 回答 1

2

因此,当您将选定的注释复制到 $scope.active 时,..firebase 绑定会丢失。我对您的代码进行了一些修改,现在可以使用了。

http://jsfiddle.net/MXUxZ/

看法

<div ng-app="notesApp">
    <div class="container" ng-controller="NotesCtrl">
        <div class="row">
             <h1>Notes</h1>

            <ul class="note-list col-xs-3 nav nav-pills nav-stacked">
                <li ng-repeat="note in notes" ng-class="{active: selectedIndex == $index}"><a href="#" ng-click="select($index)">{{ note.title }}</a>

                </li>
                <li><a href="#" ng-click="addNote()">+ Add Note</a>

                </li>
            </ul>
            <div class="note-detail col-xs-9">
                <textarea rows="20" style="width:100%" ng-model="notes[selectedIndex].body"></textarea>
            </div>
        </div>
    </div>
</div>

控制器

var notesApp = angular.module('notesApp', ['firebase']);

function NotesCtrl($scope, angularFire) {
    var fireBaseUrl = new Firebase('https://notes6754.firebaseio.com/notes');
    $scope.notes = [];
    $scope.select = function (note) {
        $scope.selectedIndex = note;
    };
    $scope.addNote = function () {
        var title = prompt('Note Title');
        if (title) {
            var note = {
                title: title,
                body: 'Replace me'
            };
            $scope.notes.push(note);
            $scope.active = note;
        }
    };
    angularFire(fireBaseUrl, $scope, 'notes').then(function () {
        $scope.selectedIndex = 0;
    });
}
于 2013-09-08T04:17:44.733 回答