javascript - 从外部脚本与 angularjs 模型通信

标签 javascript jquery angularjs twitter-bootstrap

我已经尝试了所有我能想到的方法来为我的表单触发 ng-model 函数。我正在使用 Bootstrap 日期选择器。我需要 Bootstrap 日期选择器在选择日期时触发 ng-model 值更新,有人可以告诉我如何使用外部库或外部事件与 ng-model 交互吗?

这是我的代码示例。

它不是很复杂。

/// <reference path="../../typings/tsd.d.ts" />
var app = angular.module("DatePick", []);
var doc = document;
app.controller("AppCtrl", [
	"$scope", "$q", "$http",
	function($scope, $q, $http){
		var appCtrl = this;
		
		appCtrl.name = "Jesse App";
		
		$scope.$on("pickerChange", function(evt, data){
			
		$scope.$apply(function(){
			
			$scope.form[data.key] = data.value;
			console.log(data);
		})
		
			
		})
	}
]);

var $scope;
doc.addEventListener("DOMContentLoaded", function(e){
	
	angular.bootstrap(doc.querySelector("html"), ["DatePick"]);
	
	var element = document.querySelector("form");
	
	$scope = angular.element(element).scope();
	

	
});

$(document).ready(function(){
	
	$("input:text").datepicker().change(function(e){
		
		$scope.$emit("pickerChange", {key:$(e.currentTarget).attr('name'), value:$(e.currentTarget).val()})

	})
	
	$(".trigger").click(function(e){
		
		var input = $("input[type=text]");
		input.val('xxx');
		input.trigger('input');
		
	})
	
})
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<meta name="viewport" content="initial-scale=1, maximum-scale=1">
	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css">
	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.5.0/css/bootstrap-datepicker.css">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.5.0/js/bootstrap-datepicker.min.js"></script>
	<script src="js/app.js"></script>
</head>
<body ng-controller="AppCtrl as app">
	<div class="container">
		<h3>{{app.name}}</h3> 
		Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit et, nulla, voluptates adipisci commodi, itaque ipsam earum hic ipsa qui nam. Itaque nulla, aut quod sit dignissimos explicabo laborum, mollitia!
	</div>
	<div class="container">
		<form novalidate name="form">
			<div ng-show="form.date.$dirty">
				<div ng-show="form.date.$valid">valid</div>
				<div ng-show="form.date.$invalid">invalid</div>
			</div>
			<input type="text" name="date" ng-model="date" class="form-control" ng-pattern="/[\d|\/]{5,}/" required>
			<div ng-show="form.date2.$dirty">
				<div ng-show="form.date2.$valid">valid</div>
				<div ng-show="form.date2.$invalid">invalid</div>
			</div>
			<input type="text" name="date2" ng-model="date2" class="form-control" ng-pattern="/[\d|\/]{5,}/" required>
		</form>
		<div class="btn btn-primary trigger">trigger</div>
	</div>
</body>
</html>

触发按钮的原因是我想看看我是否可以使用 jquery 来触发输入并获取 Angular 来更新模型,但这是必要的。

最佳答案

您可以使用 Bootstrap datepicker来自 ui-bootstrap 指令库。 它具有 Angular 集成,您可以将纯 Angular 绑定(bind)与 ng-model 结合使用。

关于javascript - 从外部脚本与 angularjs 模型通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33838686/

相关文章:

php - 如何使用 instagram api 获取带有特定标签的图像?

javascript - 加载动态 php 生成的 javascript

javascript - 为什么我返回的 JSON 响应被方括号 [] 包围?

javascript - 水平滚动条页面导航与垂直滚动条

jquery-ui - 如何以编程方式调用 jQuery UI Draggable 拖动启动?

javascript - 使用 Angular 更改带有文本输入的 img 类

javascript - 如何使硬件后退按钮成为退出应用程序

javascript - Offset() 在按钮单击时不起作用

javascript - Angularjs 复选框已在 ng-repeat 中选中

javascript - 获取模板 if 语句内的节点