【发布时间】:2015-04-14 11:20:45
【问题描述】:
我有一个基于服务器发送的配置的指令渲染输入。除了“选择”输入外,一切都很好。 无论我尝试什么,ng-model 都不会更新。 我已经对代码进行了很多修改以隔离问题:
Javascript:
var myApp = angular.module('example', []);
myApp.factory('DynamicData', [function() {
return {
data: {
backup_frequency: 604800
}
};
}])
.directive('dynamicInput',
['$compile', 'DynamicData', function($compile, DynamicData) {
/**
* Render the input
*/
var render = function render() {
var input = angular.element('<select class="form-control" ng-model="inner.backup_frequency" ng-options="option.value as option.title for option in options"></select>');
return input;
};
var getInput = function ()
{
var input = render();
return input ? input[0].outerHTML : '';
};
var getTemplate = function(){
var template = '<div class="form-group">' +
'Select input ' +
'<div class="col-md-7">' + getInput() + '</div>' +
'</div>';
return template;
};
return {
restrict : 'E',
scope: {
content:'=content',
},
link : function(scope, element, attrs) {
var template = getTemplate();
scope.options = [
{title: "Daily", value: 86400},
{title: "Weekly", value: 604800},
{title: "Monthly", value: 2678400},
];
scope.inner = DynamicData.data;
console.info('inner data', scope.inner);
element.html(template);
element.replaceWith($compile(element.contents())(scope));
}
};
}])
.controller('FormCtrl', ['DynamicData', '$scope', function (DynamicData, $scope){
$scope.app = {};
$scope.save = function save() {
$scope.value = DynamicData.data.backup_frequency;
console.info('DynamicData', DynamicData.data);
};
}]);
HTML:
<head>
<script data-require="angular.js@1.3.8" data-semver="1.3.8" src="https://code.angularjs.org/1.3.8/angular.js"></script>
<link href="style.css" rel="stylesheet" />
<script src="script.js"></script>
</head>
<body>
<h1>Dynamic Input :</h1>
<div data-ng-controller="FormCtrl">
<dynamic-input class="form-group" content="app"></dynamic-input>
<span data-ng-bind="value"></span><br/>
<button class="btn btn-primary" ng-click="save()">Save</button>
</div>
</body>
</html>
有一个可用的工作插件:http://plnkr.co/edit/mNBTJzZXjX6mLyPz6NCI?p=preview
你知道为什么选择中的 ng-model 没有更新吗?
编辑:我想要实现的是更新变量“inner.backup_frequency”(我的工厂 DynamicData 返回的对我的数据对象的引用)。正如您在 plunker 中看到的,每当我更改 select 中的选项时,ng-model 中包含的变量都不会更新。
感谢您的宝贵时间。
【问题讨论】:
-
你想让
<span data-ng-bind="value"></span><br/>每次点击都不同..还是选择选项中的值有效..请解释 -
嗨,您是否尝试过获取 select 上的 on change 事件并在 javascript 中设置 $scope.varaible 而不是 $scope.$apply() 只是为了查看它是否与元素在 $digest 循环之外?
-
请参阅stackoverflow.com/a/22890796/446030,了解编译和放置在 dom 中的顺序。
标签: javascript angularjs