まず第一に、私の英語でごめんなさい、私はウクライナ人です
socketio カードの削除イベントを実行すると、ビューに何も変更がありません
私の見解ではng-repeat
<card object="item" ng-repeat="item in LOG"></card>
私のコントローラーで
$scope.LOG = [{...},...{...}];
SocketIO エミット
socket.on('card_was_deleted', function (data) {
$scope.open_object = undefined;
$scope.LOG = $scope.LOG.filter(function (obj) {
return obj.ID != data.id;
});
});//or var index = ...;$scope.LOG.splice(index, 1);
私は $scope.$apply() ソリューションと安全な適用を探していました (進行中の角度の発生中の例外) が、何も機能しません。
助けてください。
このコードを $apply にラップすると、「inprog」例外が発生します。
MyModule.factory('socket', function ($rootScope) {
var socket = io.connect(...);
var safeApply = function(scope, fn) {
if (scope.$$phase) {
fn();
} else {
scope.$apply(fn);
}
};
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
safeApply($rootScope, function () {
callback.apply(socket, args);
});
});
},
emit: .../*same code with eventData */
};
});
ngRepeat でカスタムの制限付き要素をプレーンな html に置き換えるとうまくいくことがわかりました。私の指示
.directive('card', function ($compile, $http, $templateCache) {
return {
restrict: 'E',
replace: true,
template: '',
scope: { object: '=',
collapseClick: '&',
...
},
link: function (scope, element, attrs) {
var templateLoader = $http.get("/static/admin-panel/templates/card/card-" + (scope.object.type) + ".html", {cache: $templateCache});
templateLoader.success(function (html) {
element.replaceWith($compile(html)(scope));
});
}}
}
);
どうしたの?