Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript: Angular 2, AngularJS
Войти
Регистрация
Восстановить пароль
 
evilcockroach
14 / 14 / 5
Регистрация: 29.07.2013
Сообщений: 138
1

AngularJS. Отключить генерацию. Заполнение ng-model

02.11.2015, 11:20. Просмотров 267. Ответов 1

Начал только разбираться в AngularJS. Пытаюсь переделать под себя один пример, столкнулся с проблемой не понимания некоторых моментов. Неоднократно изучив код, я не смог понять две вещи:
1)Как хранится person и его свойства: person.email к примеру. При попытке в ng-model поменять contacts.selectedPerson.email на contacts.selectedPerson.surname, а потом вывести person.surname - ничего не получается.
2)Программа генерирует случайные записи в таблице, от которых я хочу избавиться, но я не вижу в коде функции, которая отвечает за это.
Архив программы: проект
admin.html:
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<div class="container news" >
 
    <toaster-container ></toaster-container >
 
    <div class="row" >
                            <div id="status"></div>
        <div class="col-md-8"
             ng-controller="PersonListController" >
            <div class="row" >
                <div class="col-md-12" >
                    <form class="form-inline well well-sm" >
                        <span class="fa fa-search" ></span >
 
                        <div class="form-group" >
                            <input type="text"
                                   class="form-control"
                                   id="name"
                                   ng-model="search"
                                   placeholder="Search name..."
                                    />
                        </div >
 
                        <span class="fa fa-sort" ></span >
 
                        <div class="form-group" >
                            <select class="form-control"
                                    ng-model="order" >
                                <option value="name" >Name (ASC)</option >
                                <option value="-name" >Name (DEC)</option >
                                <option value="email" >Surname (ASC)</option >
                                <option value="-email" >Surname (DEC)</option >
                            </select >
                        </div >
 
                        <button class="btn btn-primary pull-right"
                                ng-click="showCreateModal()" >Create
                        </button >
 
                    </form >
 
                    <table class="table table-bordered"
                           infinite-scroll="loadMore()"
                           infinite-scroll-immediate-check="false"
                           infinite-scroll-distance="1" >
 
                        <tr >
                            <th class="col-1">#</th >
                            <th class="col-2">
                                <div class="sortables" >
                                    <span ng-click="order = 'name'"
                                          class="fa fa-sort-asc" ></span >
                                    <span ng-click="order = '-name'"
                                          class="fa fa-sort-desc" ></span >
                                </div >
                                Name
                            </th >
                            <th class="col-3">
                                <div class="sortables" >
                                    <span ng-click="order = 'email'"
                                          class="fa fa-sort-asc" ></span >
                                    <span ng-click="order = '-email'"
                                          class="fa fa-sort-desc" ></span >
                                </div >
                                Surname
                            </th >
                            <th class="col-4">Club</th >
                        </tr >
 
                        <tr ng-repeat="person in contacts.persons"
                            ng-style="{
                             'background-color': person.email == contacts.selectedPerson.email ? 'lightgray' : ''
                        }"
                            ng-click="contacts.selectedPerson = person" >
                            <td >
                                <img ng-src="{{person.photo | defaultImage:'./avatar.png' }}"
                                     class="img-circle profile-photo"
                                     alt="" />
                            </td >
                            <td >{{ person.name }}</td >
                            <td >{{ person.email }}</td >
                            <td >{{ person.phonenumber }}</td >
                        </tr >
 
 
                    </table >
 
                    <div ng-show="contacts.persons.length == 0 && !contacts.isLoading" >
                        <div class="alert alert-danger" >
                            <p class="text-center" >No results found for search term '{{ search }}'</p >
                        </div >
                    </div >
 
                    <div class="spinner"
                         ng-show="contacts.isLoading" >
                        <span us-spinner="{radius:8, width:5, length: 3, lines:9}" ></span >
 
                        <p >Loading...</p >
                    </div >
 
                </div >
            </div >
 
        </div >
        <div class="col-md-4"
             ng-controller="PersonDetailController" >
 
            <div class="panel panel-default" >
                <div class="panel-heading" >Details
 
                    <button class="btn btn-danger btn-sm pull-right"
                            onclick="ajax_post('my_delete_file.php');"
                            ng-click="remove()" >Delete
                    </button >
                    <div class="clearfix" ></div >
 
                </div >
                <div class="panel-body" >
                    <form class="form-horizontal"
                          ng-submit="save()"
                          novalidate >
 
                          <ng-include src="'templates/form.html'" ></ng-include >
 
                    </form >
                </div >
            </div >
        </div >
    </div >                     
</div >

form.html:
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<div class="form-group" >
    <label class="col-sm-2 control-label" >Sign</label >
    <div class="col-sm-10" >
        <input type="text"
               id="sign"
               name="country"
               class="form-control"
               ng-model="contacts.selectedPerson.country"
               required
                />
    </div >
 
</div >
<div class="form-group" >
    <label class="col-sm-2 control-label" >Name</label >
    <div class="col-sm-10" >
        <input type="text"
               id="player"
               class="form-control"
               name="name"
               ng-model="contacts.selectedPerson.name"
               required />
    </div >
</div >
<div class="form-group" >
    <label class="col-sm-2 control-label" >Surname</label >
    <div class="col-sm-10" >
        <input type="text"
               id="surname"
               name="phone"
               class="form-control"
               ng-model="contacts.selectedPerson.email"
               required
                />
    </div >
 
</div >
<div class="form-group" >
    <label class="col-sm-2 control-label" >Club</label >
    <div class="col-sm-10" >
        <input type="text"
               id="club"
               name="city"
               class="form-control"
               ng-model="contacts.selectedPerson.phonenumber"
               required
                />
    </div >
 
</div >
<div class="form-group" >
    <label class="col-sm-2 control-label" >Photo</label >
    <div class="col-sm-10" >
        <input type="text"
               class="form-control"
               name="photo"
               id="photo"
               ng-model="contacts.selectedPerson.photo"
                />
    </div >
</div >
<div class="form-group" >
    <label class="col-sm-2 control-label" >Birthday</label >
    <div class="col-sm-10" >
        <input type="text"
               id="date"
               name="bday"
               class="form-control"
               ng-model="contacts.selectedPerson.birthdate "
               bs-datepicker
               required
                />
    </div >
 
</div >
<div class="form-group" >
    <label class="col-sm-2 control-label" >Position</label >
    <div class="col-sm-10" >
        <input type="text"
               id="position"
               name="email"
               class="form-control"
               ng-model="contacts.selectedPerson.city"
               required
                />
    </div >
</div >
<div class="form-group" >
    <label class="col-sm-2 control-label" >Nation</label >
    <div class="col-sm-10" >
        <input type="text"
               id="nation"
               name="address"
               class="form-control"
               ng-model="contacts.selectedPerson.address"
               required
                />
    </div >
 
</div >
<div class="buttons" >
    <button class="btn btn-primary btn-block"
            onclick="ajax_post('my_parse_file.php');"
            type="submit" >Save
    </button >
</div >

admin.js:
Кликните здесь для просмотра всего текста
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
var app = angular.module('codecraft', [
    'ngResource',
    'infinite-scroll',
    'angularSpinner',
    'jcs-autoValidate',
    'angular-ladda',
    'mgcrea.ngStrap',
    'toaster',
    'ngAnimate'
]);
 
app.config(function ($httpProvider, $resourceProvider, laddaProvider, $datepickerProvider) {
    $httpProvider.defaults.headers.common['Authorization'] = 'Token 20002cd74d5ce124ae219e739e18956614aab490';
    $resourceProvider.defaults.stripTrailingSlashes = false;
    laddaProvider.setOption({
        style: 'expand-right'
    });
    angular.extend($datepickerProvider.defaults, {
        dateFormat: 'd/M/yyyy',
        autoclose: true
    });
});
 
app.factory("Contact", function ($resource) {
    return $resource("https://codecraftpro.com/api/samples/v1/contact/:id/", {id: '@id'}, {
        update: {
            method: 'PUT'
        }
    });
});
 
 
app.filter('defaultImage', function () {
 
    return function (input, param) {
        console.log(input);
        console.log(param);
        if (!input) {
            return param;
        }
        return input;
    };
 
});
 
app.controller('PersonDetailController', function ($scope, ContactService) {
    $scope.contacts = ContactService;
 
 
    $scope.save = function () {
        $scope.contacts.updateContact($scope.contacts.selectedPerson)
    };
 
    $scope.remove = function () {
        $scope.contacts.removeContact($scope.contacts.selectedPerson)
    }
});
 
app.controller('PersonListController', function ($scope, $modal, ContactService) {
 
    $scope.search = "";
    $scope.order = "email";
    $scope.contacts = ContactService;
 
    $scope.loadMore = function () {
        console.log("Load More!!!");
        $scope.contacts.loadMore();
    };
 
    $scope.showCreateModal = function () {
        $scope.contacts.selectedPerson = {};
        $scope.createModal = $modal({
            scope: $scope,
            template: 'templates/modal.create.tpl.html',
            show: true
        })
    };
 
    $scope.createContact = function () {
        console.log("createContact");
        $scope.contacts.createContact($scope.contacts.selectedPerson)
            .then(function () {
                $scope.createModal.hide();
            })
    };
 
    $scope.$watch('search', function (newVal, oldVal) {
        if (angular.isDefined(newVal)) {
            $scope.contacts.doSearch(newVal);
        }
    });
 
    $scope.$watch('order', function (newVal, oldVal) {
        if (angular.isDefined(newVal)) {
            $scope.contacts.doOrder(newVal);
        }
    })
 
});
 
app.service('ContactService', function (Contact, $q, toaster) {
 
 
    var self = {
        'addPerson': function (person) {
            this.persons.push(person);
        },
        'page': 1,
        'hasMore': true,
        'isLoading': false,
        'isSaving': false,
        'selectedPerson': null,
        'persons': [],
        'search': null,
        'doSearch': function (search) {
            self.hasMore = true;
            self.page = 1;
            self.persons = [];
            self.search = search;
            self.loadContacts();
        },
        'doOrder': function (order) {
            self.hasMore = true;
            self.page = 1;
            self.persons = [];
            self.ordering = order;
            self.loadContacts();
        },
        'loadContacts': function () {
            if (self.hasMore && !self.isLoading) {
                self.isLoading = true;
 
                var params = {
                    'page': self.page,
                    'search': self.search,
                    'ordering': self.ordering
                };
 
                Contact.get(params, function (data) {
                    console.log(data);
                    angular.forEach(data.results, function (person) {
                        self.persons.push(new Contact(person));
                    });
 
                    if (!data.next) {
                        self.hasMore = false;
                    }
                    self.isLoading = false;
                });
            }
 
        },
        'updateContact': function (person) {
            console.log("Service Called Update");
            self.isSaving = true;
            person.$update().then(function () {
                self.isSaving = false;
                toaster.pop('success', 'Updated ' + person.name);
            });
        },
        'removeContact': function (person) {
            self.isDeleting = true;
            person.$remove().then(function () {
                self.isDeleting = false;
                var index = self.persons.indexOf(person);
                self.persons.splice(index, 1);
                self.selectedPerson = null;
                toaster.pop('success', 'Deleted ' + person.name);
            });
        },
        'createContact': function (person) {
            var d = $q.defer();
            self.isSaving = true;
            Contact.save(person).$promise.then(function () {
                self.isSaving = false;
                self.selectedPerson = null;
                self.hasMore = true;
                self.page = 1;
                self.persons = [];
                self.loadContacts();
                toaster.pop('success', 'Created ' + person.name);
                d.resolve()
            });
            return d.promise;
        }
 
 
    };
 
    self.loadContacts();
 
    return self;
 
});
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2015, 11:20
Ответы с готовыми решениями:

Как отключить генерацию .pdb файлов для сборок?
Суть такова: при открытии приложения студия откуда-то берет кучу .pdb файлов для всех сборок,...

NVIDIA RIVA TNT2 Model 64/Model 64 Pro (Microsoft Corporation)
Нашел несколько вот таких древностей NVIDIA RIVA TNT2 Model 64/Model 64 Pro (Microsoft...

Как отключить заполнение случайными числами, чтобы проверить программу?
Я помню, что в с++ была функция, которая останавливала заполнение случайными цифрами,при запуске...

Из model small в model tiny
Доброго времени суток . Помогите переделать программу из model small в tiny при помощи функций 3Fh...

Кофемашина KRUPS Model:PDB1450 1111MM Ref:EA8260PE/70C-0112-R, Кофемашина KRUPS Model:PDB1450 Ошибка 06
Добрый день Пришла кофемашина KRUPS Model:PDB1450 1111MM Ref:EA8260PE/70C-0112-R С ошибкой 06.При...

1
Padimanskas
Superposition
937 / 604 / 256
Регистрация: 27.10.2013
Сообщений: 2,074
03.11.2015, 17:57 2
Цитата Сообщение от evilcockroach Посмотреть сообщение
Как хранится person и его свойства: person.email к примеру.
Персоны хранятся внутри сервиса ContactService вместе с методами для загрузки, добавления, обновления, удаления и с разными индикаторами состояния данных.
Javascript
1
var self = { persons : [ /* здесь все персоны */ ]};
на счет произвольных не подскажу - надо запускать и смотреть чтобы понять где-что.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2015, 17:57

Как отключить брандмауэр или отключить фаервол
Я отключаю защитника Windows server 2012 . Отключаю фаервол. Расшариваю папки. В свойствах сети...

Написать генерацию слова
Суть задачи: Написать генерацию слова. Примечания: Первые 4 символа цифры, 2 буквы, 4 цифры но нули...

Задача на генерацию паролей
Нужно создать программу в которой будет n - количество символов пароля ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru